STL typedef 的可移植性如何?

Posted

技术标签:

【中文标题】STL typedef 的可移植性如何?【英文标题】:How portable is an STL typedef? 【发布时间】:2009-02-11 20:28:38 【问题描述】:

以下代码是否可移植?

template<typename In>
struct input_sequence_range : public pair<In,In> 
    input_sequence_range(In first, In last) : pair<In,In>(first, last)  
;

template<typename Arr>
input_sequence_range<Arr*> iseq(Arr* a,
                                typename iterator_traits<Arr*>::difference_type n)

    return input_sequence_range<Arr*>(a, a + n);


template<typename Iter>
input_sequence_range<Iter> iseq(Iter first, Iter last)

    return input_sequence_range<Iter>(first, last);

我特别质疑在 std::iterator_traits::difference_type 上重载的可移植性。如果将其类型化为 int* (尽管这可能很奇怪;我认为标准并未禁止这样做),那么为 int 数组调用 iseq() 将是模棱两可的。

关于 iterator_traits typedefs 的标准保证是什么?

【问题讨论】:

【参考方案1】:

difference_type 必须是整数类型,所以 int* 不在。

【讨论】:

【参考方案2】:

根据 Josuttis 的说法,您应该使用 typedef 以便更灵活和适当地通用。他的所有示例都以“这里有一个快速的方法”之类的方式开始,最终导致了基于 STL 类型定义的示例。

【讨论】:

以上是关于STL typedef 的可移植性如何?的主要内容,如果未能解决你的问题,请参考以下文章

使用 wmemset() 的代码的可移植性如何?

是否使用 BYTE 可移植类型的变量?

__get_cpuid 的可移植性如何?

库如何实现不同操作系统之间的可移植性

如何以最小的依赖性和最大的可移植性为单个 HTML 页面添加一点点活力?

如何打包面向 .NET Core 的可移植 .NET 库?