【发布时间】:2010-10-19 22:14:45
【问题描述】:
在 C++ 中,函数模板特化应该与普通函数完全一样。这是否意味着我可以制作一个虚拟的?
例如:
struct A
{
template <class T> void f();
template <> virtual void f<int>() {}
};
struct B : A
{
template <class T> void f();
template <> virtual void f<int>() {}
};
int main(int argc, char* argv[])
{
B b;
A& a = b;
a.f<int>();
}
Visual Studio 2005 给我以下错误:
致命错误 C1001:编译器发生内部错误。
【问题讨论】:
-
不错的错误信息!也许将其发布到 MS Connect,即使您的代码不“合法”,消息应该会更好。
-
我不确定,所以我不会将此作为真正的答案发布,但我敢打赌这是不合法的,因为 vtable 在不同的编译中最终会有所不同使用不同类型调用函数的单元(或根本没有调用它)。
-
gcc 给出了大量错误消息,以“testtemp.cpp:4: error: explicit specialization in non-namespace scope `struct A'”开头
-
这是不合法的,因为你不能专门化一个类定义。并且使模板虚拟也不起作用,因为模板不能是虚拟的。
-
我在 MS Connect 上填写了一个错误:connect.microsoft.com/VisualStudio/feedback/…
标签: c++ templates virtual specialization c1001