【发布时间】:2013-02-11 05:09:26
【问题描述】:
我有这个简单的代码:
class A{};
class B : public A{};
class C : public B{};
class Test
{
public:
template<typename T>
void f(T&){printf("template\n");}
void f(A&){printf("specialization\n");}
};
int main()
{
A a;
B b;
C c;
Test test;
test.f(a);
test.f(b);
test.f(c);
}
当我运行它时(VS2010)我有这个输出:
specialization
template
template
是否可以使用A-derived 类进行调用以使用专业化?
【问题讨论】:
-
你到底是什么意思?这个问题完全模棱两可
-
@Desolator 他的意思是他希望从 A 以及 A 实例本身派生的任何东西都使用对 A 引用的覆盖而不是通用模板扩展。他调用
foo()与B和C实例使用的是泛型,而不是覆盖。 -
@WhozCraig 谢谢!这正是我想要的。 A 派生类有一个我需要调用的函数。其他类型没有这个功能,我需要使用traits来代替。
-
@Felics 你现在应该知道了。那个“专业化”不是。它是一个超载。有一个不同的世界。
-
@WhozCraig 是的,你是对的,但在我的情况下,行为是相同的:)