Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 编程语言中的元函数和元类是什么意思? 在编译时C++计算中,我已经多次遇到这些术语。我在网上搜索过,找到了一些我无法理解的专家级资料。请帮助理解这些术语好吗?我正在寻找初学者水平的好解释。 非常感谢你的帮助! Pree元功能 C++中的元函数是一种使用模板元编程来表达编译时计算的方法——使用模板实例化和类型推导来在编译时生成结果。p>_Templates_Compiler Construction_C++14_Programming Languages_Metaprogramming - Fatal编程技术网

Templates 编程语言中的元函数和元类是什么意思? 在编译时C++计算中,我已经多次遇到这些术语。我在网上搜索过,找到了一些我无法理解的专家级资料。请帮助理解这些术语好吗?我正在寻找初学者水平的好解释。 非常感谢你的帮助! Pree元功能 C++中的元函数是一种使用模板元编程来表达编译时计算的方法——使用模板实例化和类型推导来在编译时生成结果。p>

Templates 编程语言中的元函数和元类是什么意思? 在编译时C++计算中,我已经多次遇到这些术语。我在网上搜索过,找到了一些我无法理解的专家级资料。请帮助理解这些术语好吗?我正在寻找初学者水平的好解释。 非常感谢你的帮助! Pree元功能 C++中的元函数是一种使用模板元编程来表达编译时计算的方法——使用模板实例化和类型推导来在编译时生成结果。p>,templates,compiler-construction,c++14,programming-languages,metaprogramming,Templates,Compiler Construction,C++14,Programming Languages,Metaprogramming,基本上,元函数是一个类模板,对于返回值的元函数,它具有constexpr成员;对于返回类型的元函数,它具有typedef成员。 该技术可以通过检查两个类型参数是否相同的元函数is_same来说明。一个可能的实现是 如果int为32位,它将计算为布尔值true,否则为false 另一个例子,来自type_traits的是std::is_floating_point,它检查一个类型是否是浮点类型。它可以称为 is_floating_point<int>::value 以及迭代器类别,即

基本上,元函数是一个类模板,对于返回值的元函数,它具有constexpr成员;对于返回类型的元函数,它具有typedef成员。 该技术可以通过检查两个类型参数是否相同的元函数is_same来说明。一个可能的实现是

如果int为32位,它将计算为布尔值true,否则为false

另一个例子,来自type_traits的是std::is_floating_point,它检查一个类型是否是浮点类型。它可以称为

is_floating_point<int>::value
以及迭代器类别,即ForwardIterator、RandomAccessIterator等

iterator_traits<Iter>::iterator_category
然后编译器会将其实例化到类中

 class Example {
 public:
     virtual void Foo() =0;
     virtual int Bar(int) =0;
     virtual ~Foo() =default;
 }

在这篇博文中可以找到元类建议的一个很好的摘要。一个全面的来源是

非常感谢您的精彩解释!
iterator_traits<Iter>::value_type
iterator_traits<Iter>::iterator_category
template <unsigned int N>
struct Fac{
    static constexpr unsigned int value = N * Fac<N-1>::value; 
};

template <>
struct Fac<0>{
    static constexpr unsigned int value = 1;
};
interface Example {
    void Foo();
    int  Bar(int);
}
 class Example {
 public:
     virtual void Foo() =0;
     virtual int Bar(int) =0;
     virtual ~Foo() =default;
 }