模板typename作为同一模板的其他参数的类型

时间:2015-10-01 22:03:00

标签: c++ templates

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

所以我试图重新使用type参数,但我得到了非法类型。

#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;
}

1 个答案:

答案 0 :(得分:2)

cppreference.com复制:

  

[非类型模板参数的类型]是以下类型之一(可选择cv-qualified,忽略限定符):

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

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