C++ 为什么类类型对象不是';模板参数中不允许使用?

C++ 为什么类类型对象不是';模板参数中不允许使用?,c++,templates,C++,Templates,以下内容不起作用: // case one: struct MyClass { int x; }; template <MyClass name> void foo() { } //案例一: 结构MyClass{ int x; }; 模板 void foo(){ } 但如果我把它作为参考,它会起作用: // case two: struct MyClass { int x; }; template <MyClass &name> voi

以下内容不起作用:

// case one:

struct MyClass {
    int x;
};

template <MyClass name>
void foo() {
}
//案例一:
结构MyClass{
int x;
};
模板
void foo(){
}
但如果我把它作为参考,它会起作用:

// case two:

struct MyClass {
    int x;
};

template <MyClass &name>
void foo() {
}
//案例二:
结构MyClass{
int x;
};
模板
void foo(){
}

我是否需要传递MyClass的常量对象,以便在第一种情况下与类一起工作?

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

也许这就是你想要的

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;
}
模板
无效foo(常数T和参数){

为什么在这种情况下你需要一个模板?@πάνταῥεῖ: 我在问为什么不允许这样做。如果你可以评论一下,因为这个问题已经结束了。就像我知道模板是在编译时推导出来的,但是类对象到底是一个什么样的问题?副本中的第二个答案很好地描述了为什么不允许使用类类型而不是类的指针或引用。No、 我只想知道如果我使用一个类对象而不是对它的引用,会出现什么问题。这与模板是在编译时推导出来的吗?准确程度如何?@user963241啊,所以你在这里创建了一个。“使用类型参数声明函数模板的格式为:
template function\u declaration
template function\u declaration
您可以选择
标识符
,但定义的其余部分必须遵循该格式。
template
不遵循该格式。