继承的模板类的构造函数
constructor for inherited template class
在下面的代码中,我想保留继承class B : public A<F>
,但只想将globalFunction()
传递给A
并从B
访问为A::f1((和A::fa((。我该怎么做?
#include <iostream>
void globalFunction()
{ }
//passing function to class A from main()
template<typename F>
class A
{
public:
F f1;
A(F fun1) : f1(fun1) {}
void fa() { f1(); } ;
};
template<typename F>
class B : public A<F>
{
public:
B (F fun2) : A<F>(fun2) {}
void fb() ;
};
template<typename F>
void B<F>::fb() { A<F>::f1(); }
int main()
{
A obja(globalFunction);
obja.fa();
B objb(globalFunction);
objb.fb();
}
基本上我想避免B
B<F>
。继承A<F>
B
是否也会使B
成为模板B<F>
?我没有B
任何地方F
使用模板参数,它只是从A
继承并从B
使用作为A<F>::f1()
用户会将函数globalFunction
传递给模板化参数,因此无法使用class B : public A<decltype(globalFunction)>
。
如果您知道您的函子类型总是某个签名的函数,则可以完全摆脱模板:
void globalFunction()
{ }
//passing function to class A from main()
class A
{
public:
using fptr_t = void (*)();
fptr_t f1;
A(fptr_t fun1) : f1(fun1) {}
void fa() { f1(); } ;
};
class B : public A
{
public:
B (fptr_t fun2) : A(fun2) {}
void fb() ;
};
void B::fb() { A::f1(); }
int main()
{
A obja(globalFunction);
obja.fa();
B objb(globalFunction);
objb.fb();
}
这对性能略有损害,因为您将无法对函数指针进行内联调用,但它确实会根据请求删除模板。
相关文章:
- 具有相同名称的类的构造函数继承
- 多复制构造函数继承中的惊人行为
- CRTP 和复制/移动赋值/构造函数继承
- 复制构造函数继承动态分配的数组
- 无法从 c++ 中的构造函数继承
- 在构造函数继承中使用默认构造函数
- 构造函数继承和直接成员初始化
- C++ - 使用私有参数的构造函数继承
- 通过可变参数模板进行C++11构造函数继承
- C++11构造函数继承和不带参数的构造函数
- C++11 - 构造函数继承
- C++构造函数继承
- 使用 C++11 编译器的构造函数继承正在生成错误
- 选择性构造函数继承"Ambiguous resolution"错误
- 什么是构造函数继承
- C++对象中的构造函数继承与方法继承
- C++构造函数继承没有匹配的函数
- C++构造函数继承(从派生类调用构造函数)
- 模板构造函数继承的标准符合语法是什么
- C++构造函数继承错误