のVisual Studioで提供し、次のコードは、Visual Studio 2015コミュニティでC2660エラーを与える:可変引数テンプレート関数を呼び出すと、エラーC2660が2015
class Logger {
public:
template <class T> void writeLine(const T& value) {
if (this->filestream.is_open()) {
filestream << object << std::endl;
}
}
template <typename T> void write(const T& value) {
if (this->filestream.is_open()) {
filestream << value;
}
}
template <typename T, typename... Targs> void write(const T& value, const Targs&... args) {
if (this->filestream.is_open()) {
filestream << value;
this->write(args...);
}
}
// ... singleton stuff
}
私はこのような関数を呼び出しています:
#define LOG(x) Logger::instance().write(__FILE__, " (line ", __LINE__, "): ", x, std::endl);
出力ログのエラーは次のとおりです。
encoder.cpp(51): error C2660: 'Logger::write': function does not take 6 arguments
私は 'std :: endl'が問題を起こしているとは考えていませんでした。私は最初のソリューションを使用し、それは完全に動作します。コードを転送するのに最適な理由は何ですか? –
@AliAlidoust転送問題には多くの良い参考文献があり、どのように完全転送がそれに対処しているのですか。こちらを参照してください:[forward'を使うメリット](http://stackoverflow.com/questions/3582001/advantages-of-using-forward)、リンクされた記事[Forwarding Problem](http:// www。 open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm)。彼らは私ができるよりもはるかにそれを説明します。 – WhozCraig