我試圖創建一個名爲Sink
的類,它將創建一個指向您傳入的類的指針,這是在RAII中包裝api。從可變參數模板構造類
在此代碼的完整版本中,自定義類也從另一個類繼承,並且有靜態資產來檢查它。指針也傳遞給api。
但爲了保持簡單,我已將其刪除。
這是我從cpp.sh
In function 'int main()':
43:30: error: no matching function for call to 'Sink<OneArg>::Sink(int)'
43:30: note: candidate is:
10:5: note: Sink<CustomSink, Args>::Sink(Args&& ...) [with CustomSink = OneArg; Args = {}]
10:5: note: candidate expects 0 arguments, 1 provided
代碼得到錯誤:
#include <string>
#include <iostream>
#include <memory>
#include <utility>
template<typename CustomSink, typename... Args>
class Sink
{
public:
Sink(Args&&... args)
{
_ptr = std::make_unique<CustomSink>(std::forward<Args>(args)...);
}
~Sink()
{
}
private:
std::unique_ptr<CustomSink> _ptr;
};
//////////////////////////////////////////////////////////////////////
class NoArg
{
public:
NoArg() {};
~NoArg() {};
};
class OneArg
{
public:
OneArg(int a) {
std::cout << a << '\n';
};
~OneArg() {};
};
//////////////////////////////////////////////////////////////////////
int main(){
Sink<NoArg> noArgSink;
Sink<OneArg> oneArgSink(5);
return 0;
}