私は、渡すクラスへのポインタを作成する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;
}