【发布时间】:2018-06-13 03:26:22
【问题描述】:
我有这个代码:
struct C
{
int d1;
int d2;
};
struct A
{
void write(C data)
{
}
};
struct B
{
void use(C data)
{
}
};
现在我想定义一个使用A 或B 的新类并调用它们的write 和use 方法。像这样的东西:
template <class T>
struct D
{
T t;
D(T myT) { t=myT; }
void myFunct(C data)
{
// t.????(data);
}
};
如你所见,如果两个类有相似的方法名,那么实现D 会很容易,但是由于A 和B 有不同的方法,那么我需要告诉编译器它应该使用哪个方法采用。我怎样才能做到这一点?
我不想更改A 或B,也不想创建A 和B 的子类来创建具有相同名称的方法。
我想要一种方法来告诉编译器使用哪个方法作为模板的一部分,这可能吗?
【问题讨论】:
-
可以使用动态转换,判断T是A还是B,然后调用转换变量的函数
-
@mahdi_12167 - 不要在评论区发布答案
-
@mahdi_12167 这要求
A和B是多态的,并否定了D作为模板所带来的无运行时开销优势。
标签: c++ c++11 templates methods