c++ - 模板类没有实例构造函数
问题描述
我希望能够使我的 Wrapper 更短。
我不想decltype(foo)
在每行中包含两次
使用构造函数能够像我尝试的那样调用 _foo2 的正确方法是什么。
class Helper {
public:
Helper(LPCTSTR filename) : _filename(filename) {}
~Helper() { }
template<typename T>
T CallFunction() {
return T();
}
private:
LPCTSTR _filename;
};
template<typename T> class WrapFuncObj;
template<typename T, typename... Args>
class WrapFuncObj<T(Args...)> {
public:
WrapFuncObj(Helper* dll, LPCTSTR func) : _dll(dll), _func(func) {}
T operator()(Args&&... args) {
return _dll->CallFunction<T>();
}
private:
Helper* _dll;
LPCTSTR _func;
};
class Export {
Helper _dll{ L"SayHello.dll" };
public:
WrapFuncObj<decltype(foo)> _foo = WrapFuncObj<decltype(foo)>(&_dll, L"foo"); // works
WrapFuncObj<decltype(foo)> _foo2 = WrapFuncObj(&_dll, L"foo"); // problem here
};
解决方案
您可以直接提供构造函数参数,无需通过另一个WrapFuncObj
函数转换间接提供。它的工作方式与您使用它的方式相同_dll
:
WrapFuncObj<decltype(foo)> _foo2{&_dll, L"foo"};
请注意,数据成员的默认初始化程序不允许使用括号进行初始化,您需要使用大括号。
推荐阅读
- r - 如何在闪亮的应用程序中显示外部网站?
- ios - 在 SwiftUI 中检测 DragGesture 取消
- react-native - Bitrise + Detox + React-native - Hello World 示例挂在 detox.init 上
- java - 无法将字符串转换为本地日期
- seaborn - 沿样条曲线绘制条形图
- angular - Angular Material:如何在“mat-card-header”中使用“mat-icon”作为“mat-card-avatar”?
- reactjs - 我不知道如何在我的 react.js 项目中使用 pexels api
- r - 轴标签在 highcharter 条形图中被截断
- xml - XSLT 将参数外部字符串值集与字符串进行比较?
- javascript - 在angular(4)中作为承诺传递给大子组件时获取“this.editAction不是函数异常”