C++:“特质”和“元功能”是同义词吗?

nod*_*kai 0 c++ template-meta-programming

或者,trait 是否可能是指利用元功能的特定方式?

如果他们不是同义词,请点我的一些例子特质不属于元函数或那些元功能不属于特质。一段实际工作的代码,也许在 STL 或 Boost 库中,将受到赞赏,而不是一个人为的玩具示例。

我想看看 C++ 编程领域的专家如何使用这些术语。我不确定它们是否有权威的定义......

提前致谢!


澄清:我并不是在寻找任何特征或元功能的例子。在我的日常工作中,我一直在使用其中的数十个(如果不是数百个)。

文恩0110.svg
维恩0110 ”。通过Commons在公共领域获得许可。

MSa*_*ers 5

“元”是用于模板编程的 C++ 术语。一个明显的例子是 Boost 元编程库 (MPL)。

从这个意义上说,元函数是一个函数,其域不是对象而是 C++ 构造。因此,常见的输入是类型、普通函数和其他模板。

例如template<typename T> using Foo = Bar<T, int>,一个简单的元函数具有作为其输入的类型T和作为其输出的类型Foo<T>。微不足道,是的,但普通功能也可能微不足道。

trait 是一个元函数,它的 codomain 是一个常量表达式,通常是布尔值。例如is_foo<T>::value显然是布尔值。从这个意义上说,最古老的特征是sizeof(T)谁的 codomain 是size_t