我想为每个作为模板参数传递的类型创建实现print()
方法的模板类。
类似的东西:
class Interface
{
public:
virtual ~Interface() = default;
virtual void print(int) = 0;
virtual void print(double) = 0;
};
X x<int,double,Interface>;
class X
具有公共方法void print()
,并且可以使用。
下面的完整代码:
#include <iostream>
#include <type_traits>
struct Printer
{
void print(int i) {std::cout << i << std::endl; }
void print(double d) {std::cout << d << std::endl; }
};
class Interface
{
public:
virtual ~Interface() = default;
virtual void print(int) = 0;
virtual void print(double) = 0;
};
template <typename... Args>
class X;
template <typename Interface>
class X<Interface> : public Interface
{
static_assert(std::is_abstract<Interface>::value,"Last argument should be an interface");
public:
X(Printer printer) {}
using Interface::print;
};
template <typename Arg,typename... Args>
class X<Arg,Args...> : public X<Args...>
{
using Parent = X<Args...>;
public:
using Parent::print;
X(Printer printer_): Parent(printer),printer{printer_} {}
void print(Arg arg) override { printer.print(arg); }
private:
Printer printer;
};
int main()
{
Printer printer;
X<double,int,Interface> x(printer);
x.print(5);
}
您看到class X
使用Printer
类,但是问题是我想将Printer
作为模板参数...
有可能吗?该怎么做?