【发布时间】:2013-03-26 01:23:42
【问题描述】:
我有一个模板化的矩阵类,我为各种 POD 类型和自定义类类型显式实例化。然而,一些成员函数对一些这样的自定义类型没有意义。例如:
Matrix<int> LoadFile(....); // This makes sense
Matrix<My_custom_class> LoadFile(...); //This doesn't make sense in the context of the custom class
我可以阻止 LoadFile 函数(它是一个成员函数)为选择类型的 Matrix 对象实例化吗?到目前为止,我通过将LoadFile 设为友元函数然后显式控制其实例化来避免该问题。但是我想知道当LoadFile 是Matrix 的成员函数时我是否可以这样做。
【问题讨论】:
-
@JBentley 这个问题似乎是相关的,但我不太想要同样的结果。我不希望编译器错误阻止我实例化特定变体。我完全想要
Matrix<My_custom_class>,但我只是不想要成员函数LoadFile。我正在实例化这些符号并将它们打包在一个库中。因此,如果我在应用程序中对My_custom_class类型的矩阵调用LoadFile,那么我预计会收到一个链接器错误,指出未找到此类符号。 -
问题从生成链接器错误而不是编译器错误的代码开始,只声明(而不是定义)特化。
标签: c++ templates c++11 metaprogramming