作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 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/
我是一名优秀的程序员,十分优秀!