【发布时间】:2020-03-03 17:29:34
【问题描述】:
有两个不同的类具有交叉的方法集:
class A {
public:
int Value1() { return 100; }
char Value2() { return "a"; }
void actionA() { };
}
class B {
public:
int Value1() { return 200; }
char Value2() { return "b"; }
void actionB() { };
}
类接口的公共部分可以这样描述:
class GenericPart {
public:
virtual int Value1();
virtual char Value2();
}
请注意,A 和 B 类来自某个库,因此不能从 GenericPart 继承。
有一个模板函数可用于实现GenericPart 中描述的方法的对象:
template <typename T>
void function(T record) {
std::cout << record.Value1() << " " << record.Value2() << std::endl;
}
是否可以专门化此模板函数以使其仅接收与GenericPart 匹配的对象?
【问题讨论】:
-
当您说 是否可以专门化此模板函数以使其仅接收与 GenericPart 匹配的对象? 这是否意味着您不希望或确实希望它接受 @ 987654329@ 和
B也一样? -
改用指针(无论如何都需要多态性工作),并创建一个采用
GenericPart*参数的overload? -
@Someprogrammerdude 我建议引用更安全,不必检查 nullptr。
-
@Someprogrammerdude 似乎这完全不可能,因为 “类 A 和 B 来自某个库,因此不能从 GenericPart 继承。”
-
匹配
Genericpart是什么意思?A和B是在上面做的吗?
标签: c++ templates interface template-specialization