[英]template class no instance constructor
我希望能夠使我的 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
};
您可以直接提供構造函數 arguments,無需通過另一個WrapFuncObj
函數轉換來間接提供。 它的工作方式與您用於_dll
的方式相同:
WrapFuncObj<decltype(foo)> _foo2{&_dll, L"foo"};
請注意,數據成員的默認初始化程序不允許使用括號進行初始化,您需要使用大括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.