C++ 泛型函数中类的泛化为基类创建目标代码?
似乎当C++ 泛型函数中类的泛化为基类创建目标代码?,c++,c++11,templates,C++,C++11,Templates,似乎当T被具体化为B时,它将d2转换为它的父类(B),我能做些什么来避免这种情况? (我需要这样做,这样我既不能改变类的数量,也不能改变类的继承)。 谢谢 似乎当T被具体化为B时,它将d2转换为它的父类(B),我能做些什么来避免这种情况 不要在fooF中接受t。取一个T就是对对象进行切片,然后只给你B部分。如果取而代之的是C,则可以访问对象的a部分。另外,fooF采用了一个const变量,因此不能修改该变量。将其更改为引用,这样更改将附着到您传递的对象,从而为您提供 error: ‘const
T
被具体化为B
时,它将d2
转换为它的父类(B
),我能做些什么来避免这种情况?
(我需要这样做,这样我既不能改变类的数量,也不能改变类的继承)。
谢谢
似乎当T被具体化为B时,它将d2转换为它的父类(B),我能做些什么来避免这种情况
不要在fooF
中接受t
。取一个T
就是对对象进行切片,然后只给你B
部分。如果取而代之的是C
,则可以访问对象的a
部分。另外,fooF
采用了一个const
变量,因此不能修改该变量。将其更改为引用,这样更改将附着到您传递的对象,从而为您提供
error: ‘const class B’ has no member named ‘fooA’ element.fooA = 1;
void fooF(C&element){
元素fooA=1;
}
不确定您到底想要什么。。。但我怀疑你想要的是一样的东西
void fooF(C<T>& element) {
element.fooA = 1;
}
嗯,是的,真正的问题有点复杂,想象一下还有一个类E:
类E:public B,public C{}代码>所以我需要fooF()只处理E或D,并且只在T为B时使用。@roastmycodebankywanky然后使其无效fooF(C&element)
?这似乎是一个糟糕的设计。只是好奇为什么类的数量或它的继承不能改变?这是一个赋值。
void fooF(C<T>& element) {
element.fooA = 1;
}
template<typename T>
class C : public A {
public:
using A::A;
template <typename U>
typename std::enable_if<std::is_base_of<C<T>, U>::value>::type
fooF (U element)
{ element.fooA = 1; }
};
template <typename U>
typename std::enable_if<std::is_base_of<B, U>::value>::type
fooF (U element)
{ element.fooA = 1; }