为什么模板参数中不允许类类型对象?

时间:2014-12-02 12:13:38

标签: c++ templates

以下内容不起作用:

// case one:

struct MyClass {
    int x;
};

template <MyClass name>
void foo() {
}

但是如果我把它作为参考它就可以了:

// case two:

struct MyClass {
    int x;
};

template <MyClass &name>
void foo() {
}

我是否需要传递MyClass的常量对象才能在第一种情况下使用类?

1 个答案:

答案 0 :(得分:1)

看起来你正在尝试专门化模板?

也许这就是你想要的?

template <typename T>
void foo(const T& param){
    cout << reinterpret_cast<const int&>(param) << endl;
}

template <>
void foo(const MyClass& param) {
    cout << param.x << endl;
}

int main() {
    MyClass bar = {13};

    foo(42L); // Outputs 42
    foo(bar); // Outputs 13

    return 0;
}

(请注意,reinterpret_cast非常可疑,我在这里只是用它作为例子。)