【发布时间】:2019-10-25 20:39:39
【问题描述】:
这是我的问题:
#include <string>
struct Print
{
template <typename T>
void Printer( const T& data )
{
PrinterInstance( data );
}
void PrinterInstance( const int& data )
{
printf( "INTEGER\n" );
}
};
void PrinterInstance( const std::string& data )
{
printf( "STRING\n" );
}
int main()
{
Print print;
print.Printer( "3" );
return 0;
}
在 Print 类中,我有一个模板 Printer,它基本上根据模板的参数调用 PrinterInstance。此外,我应该能够通过在类之外添加更多 PrinterInstance 来扩展此功能。
但这不会编译。如果我只在类中实现 PrinterInstance,那没关系。如果我只在类外实现 PrinterInstance,也可以。但是一旦我在类内和类外都有一个 PrinterInstance,模板将只尝试使用类一。
我可以做这个吗?
编辑: 它必须在 C++11 中工作。
【问题讨论】:
-
我猜你必须为此使用 SFINAE,因为没有办法将类方法和全局函数视为重载。但在此之前,我建议考虑是否真的需要这样做。为什么在全局范围内需要一些重载,而在类范围内需要一些重载?
-
@scohe001 嗯...不,感谢您的回答,但这根本不是我要问的。 =)
-
@Yksisarvinen 自定义编码方法。例如,想象一个序列化为 json 的类。在类中,我有一个模板化的 operator=(),它调用 to_json(int)、to_json(double) 和所有基本数据类型......但是用户应该能够创建自己的 to_json(struct User1)。
-
Print中的方法一定要叫PrinterInstance吗?或者它只需要被称为 PrinterInstance 的东西替换吗? (我怀疑你过度限制了你的解决方案空间)