1

コードに少し問題があります。可変引数を使用して関数を作成しようとしましたが、コンパイルすると失敗し、その理由がわかりません。だから誰かが私を助けることができれば...

ここに私の機能があります:

クエリセット.hpp:

template <typename T>
class QuerySet
{
   template<typename U,typename ... Args>
   QuerySet& filter(const std::string& colum,Args ... args,const std::string& operation, const U& value);
   //...
}

template<typename T>
template<typename U,typename ... Args>
QuerySet<T>& QuerySet<T>::filter(const std::string& colum,Args ... args,const std::string& operation, const U& value)
{
     //some job
     return *this;
}

main.cpp QuerySet クエリセット; queryset.filter(人物::_master,人物::_lvl,"gt",4); //135行目

注: Perso::_master と Perso::_lvl は static const std::string です。

エラー:

g++ -g -std=c++0x -I"/my_path/cpp-ORM" -lmysqlcppconn   -o main.o -c main.cpp;
main.cpp: In function ‘int main(int, char**)’:
main.cpp:135:46: erreur: no matching function for call to ‘orm::QuerySet<Perso>::filter(const string&, const string&, const string&, int)’
main.cpp:135:46: note: candidate is:
/my_path/QuerySet.hpp:18:23: note: template<class U, class ... Args> orm::QuerySet<T>& orm::QuerySet::filter(const string&, Args ..., const string&, const U&) [with U = U, Args = {Args ...}, T = Perso, std::string = std::basic_string<char>]

情報 : gcc バージョン 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04) を使用していますが、gcc4.8 で試したところ、エラーが発生しました。

4

2 に答える 2

4

可変個引数パックは、関数シグネチャの途中ではなく、末尾に配置する必要があります。

理解を深めるために、これを読んでください: パック展開が最後のパラメーターにない可変引数関数テンプレート

于 2013-09-17T14:06:25.333 に答える