2015-10-01 117 views
0

我想创建一个模板,我可以使用不同的矢量类型,并将一个常量作为相同类型的向量。 我希望能够传递常量作为模板参数,以便让编译器优化它,而不需要明确的专门化。模板typename作为同一模板的其他参数的类型

所以我试图重新使用类型参数,但我有非法类型。

#include <vector> 
using namespace std; 

template<typename WEIGHT, WEIGHT multiplier> 
void test_multipier(vector<WEIGHT> &v) 
{ 
    uint16_t num = 16; 
    /*...*/ 
    WEIGHT w = multiplier* (num); 
    v.push_back(w); 
} 

int main() 
{ 
    vector<double> test_vector; 

    test_multipier<double,0.01>(test_vector); 
    //^^ Error C2993 'double': illegal type for non-type template parameter 'multiplier' 


    return 0; 
} 
+0

非类型模板参数不能是浮点类型。相反,将其作为第二个参数传递。 – 0x499602D2

+0

Duplicate:http://stackoverflow.com/questions/5687540/non-type-template-parameters –

回答

2

cppreference.com复制:

[A非类型模板参数的类型]是以下类型中的一个(任选CV-合格,则限定符被忽略):

  • std::nullptr_t(自C++ 11以来);
  • 整型;
  • 左值引用类型(对象或函数);
  • 指针类型(对象或函数);
  • 指向成员类型(指向成员对象或成员函数)的指针;
  • 枚举类型。

double不能用作非类型模板参数。

相关问题