Mir*_*pas 2 c++ inheritance templates
有以下代码:
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;
}
};
Run Code Online (Sandbox Code Playgroud)
是否有可能做一些C++黑魔法(对那些类型的显式实例化,一些智能using等)来识别以下的实现:
virtual void print(int x) = 0;
virtual void print(float x) = 0;
Run Code Online (Sandbox Code Playgroud)
在Derived课堂上的形式:
template<typename T>
void print(T x)
Run Code Online (Sandbox Code Playgroud)
不,没有.
您可以做的是转发到本地模板实现:
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;
}
};
Run Code Online (Sandbox Code Playgroud)
如果你发现它太冗长了,并且你有很多这样的prints,你也可以将它宏:
#define PRINT_FWD(typ) void print(typ x) override { printTempl(x); }
Run Code Online (Sandbox Code Playgroud)