类模板专业化

时间:2010-11-05 09:47:24

标签: c++ templates

我怎样才能实现这样的目标:

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)

2 个答案:

答案 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....
};