【发布时间】:2014-09-08 12:32:37
【问题描述】:
我只有一个用于C++学校作业的hpp文件(我不允许添加cpp文件,声明和实现都应该写在文件中)。
我在里面写了这段代码:
template<class T>
class Matrix
{
void foo()
{
//do something for a T variable.
}
};
我想添加另一个foo 方法,但是这个foo() 将专门用于<int>。
我在某些地方读到我需要声明一个新的专业化类才能使其工作。但我想要的是专门的foo 将位于原始foo 的下方,所以它看起来像这样:
template<class T>
class Matrix
{
void foo(T x)
{
//do something for a T variable.
}
template<> void foo<int>(int x)
{
//do something for an int variable.
}
};
- 为什么我收到此语法的错误(“在 '
- 为什么这不可能?
- 如何在不声明新的专业类的情况下解决此问题?
谢谢
【问题讨论】:
-
foo不是模板。Matrix是。 -
您收到错误是因为这违反了 C++ 语法。您不能只专门化模板类的成员,而是需要专门化整个类。
-
但是我在那个类中有很多其他函数,所以我必须将所有这些函数复制粘贴到新的“int”类中吗?听起来像是可怕的代码重复。
-
@40two:您只能专门化方法:参见 T.C.回答。
-
您还可以将方法本身设为模板,并对方法本身进行特化。具体要求是什么时候?
标签: c++ templates template-specialization