gpt4 book ai didi

c++如何将模板应用于模板类的子/ friend ?

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:18 24 4
gpt4 key购买 nike

在 C++ 中,子类或友元函数如何访问父类的所有可能模板类型?如何修改下面的代码,使得无论T是什么类型,友元函数和子函数都不会出现类型错误? (目前只有int类型可以正常使用)。

// PARENT CLASS:¨

template <class T>
class parent{
public:
T variable1;

friend int function1(parent, int a);
};


//CHILD CLASS:

class child : public parent<int> {
public:
void setvariable(int a){ variable1 = a; };

};


// FRIEND FUNCTION:

int function1(parent<int> k, int a) {
return k.variable1 +a;
};

这样下面的代码就可以无误地编译了:

int main() {
child child1; //Child
child child2;

child1.setvariable(4);
child2.setvariable(4.4); //Type error/retyping

cout << function1(child1.variable1, 4) << endl; // Function
cout << function1(child2.variable1, 4.0) << endl; // Type error

system("pause");
return 1;
}

最佳答案

这将允许友元函数访问所有派生类型的 variable1。

//Parent
template <class T>
class parent{
public:
template<typename U>
friend U function1(parent<U>& parent, U a);

private:
T variable1;
};


//Child
class child : public parent<int> {
public:
void setvariable(int a){ variable1 = a; };
};


//Friend
template<typename U>
U function1(parent<U>& k, U a) {
return k.variable1 + a;
};

关于c++如何将模板应用于模板类的子/ friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45525833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com