拥有以下代码:
struct Base
{
virtual void print(int x) = 0;
virtual void print(float x) = 0;
};
struct Derived : public Base
{
template<typename T>
void print(T x)
{
std::cout<<x<<std::endl;
}
};
是否有可能做一些C ++黑魔法(对这些类型的显式实例化,一些聪明的using
等)来识别实现:
virtual void print(int x) = 0;
virtual void print(float x) = 0;
在Derived
课程中的形式:
template<typename T>
void print(T x)
答案 0 :(得分:7)
不,没有。
您可以做的是转发到本地模板实施:
struct Derived : public Base
{
void print(int x) override { printTempl(x); }
void print(float x) override { printTempl(x); }
template <typename T>
void printTempl(T x)
{
std::cout << x << std::endl;
}
};
如果您发现过于冗长,并且您有许多此类print
,则还可以将其设为宏:
#define PRINT_FWD(typ) void print(typ x) override { printTempl(x); }