簡體   English   中英

模板 class 無實例構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM