我怎样才能实现这样的目标:
AllocFactorPolicy<1.25> allocDouble;
AllocFactorPolicy<125,-2> allocMaE;
我尝试过这样的事情:
template<class T&>
struct AllocFactorPolicy;
template<double&& value>
struct AllocFactorPolicy
{
double value_;
AllocFactorPolicy(): value_(value)
{
cout << "double&&\n";
}
};
template<int Mantiss, int Exponent>
struct AllocFactorPolicy
{
int mantiss_,
exponent_;
AllocFactorPolicy():mantiss_(Mantiss),exponent_(Exponent)
{
cout << "M&E\n";
}
};
但它对我不起作用。 (VS 2010 Ultimate)
答案 0 :(得分:1)
问题很简单:您使用不同的模板参数arity声明了两次相同的类。这是不允许的。
此外,您只能使用整数类型,指针或引用作为参数“值”,因此排除float
。
你得到的模板想法错了......你实际上并不需要有属性来获取用作参数的值的值:它们是你班级中的常量,你当然可以直接访问它们。
阅读一本关于C ++的好书,你显然还没有理解模板。
答案 1 :(得分:0)
你的整个C++ templating都错了。 Templating允许您使用泛型类型编写一次函数/类,并在使用函数/类时允许任何类型。
您无法将值数据作为模板参数传递。
以下是有关如何为AllocFactoryPolicy
template<typename T>
struct AllocFactorPolicy
{
T value_;
AllocFactorPolicy(T value): value_(value)
{
}
//Have getters here....
};
template<typename T, typename U>
struct AllocFactorPolicy
{
T mantiss_,
U exponent_;
AllocFactorPolicy(T mantiss, U exponent):mantiss_(mantiss),exponent_(exponent)
{
}
};
然后你可以做
AllocFactorPolicy<double> allocDouble(1.25);
AllocFactorPolicy<int, double> allocMaE(125,-2);
PS 这是未经测试的,但是你得到了照片。
更新我看到有两个结构名称相同的结构,你为什么不这样做呢?
template<typename T>
struct AllocFactorPolicy
{
T value_;
T mantiss_,
int exponent_;
AllocFactorPolicy(T value): value_(value)
{
}
AllocFactorPolicy(T mantiss, int exponent):mantiss_(mantiss),exponent_(exponent)
{
}
//Have getters here....
};