Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 泛型函数中类的泛化为基类创建目标代码?_C++_C++11_Templates - Fatal编程技术网

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; }