2011-10-18 14 views
1

ベクトルをテンプレートにしようとしています。私のメインでは、次のものがあります。ベクトルとベクトル関数のテンプレートを使用

ここで、Wordはstd :: stringとintを含む構造体で、dataはstd :: stringです。私のヘッダファイルでは私が持っている:私は次のエラーを取得コンパイル時に

template <typename T> 
std::vector<T> push_vector(std::string&); 

は、しかし:

main.cpp: In function ‘int main(int, char**)’: 
main.cpp:27:53: error: no matching function for call to ‘push_vector(std::string&)’ 
main.cpp:27:53: note: candidate is: 
templates.h:13:20: note: template<class T> std::vector<T> push_vector(std::string&) 

を私はテンプレート機能を実装していたときに、私は何かが欠けています知っているが、私はわかりません何。事前にお時間をいただきありがとうございます。

答えて

2

私はあなたが実際におそらくもっとこのような何かをしたいのか理解していれば:

template <typename T> 
void push_vector(const std::string& str, std::vector<T>& vec) 
{ 
    // convert str to T if possible 
    // throw on failure maybe? 
    // assign vec with converted data 
} 

そして、そのようにそれを呼び出す:

std::string data("Hello"); 
std::vector<Word> concordance; 
push_vector(data, concordance); 

そうでない場合は、明示的機能を付与しなければならない、それはテンプレートです引数はの値から推測できないので、戻り値をその型にする必要があります。このように参照でパラメータを渡すことはあまり言及しませんが、パフォーマンスを節約します。

+0

あなたの提案は最も理にかなっています。私は自分のコードでそれを実装し、それは完全に働いた。ありがとうございました。 –

1

試してください:あなたは、戻り値以外のTのどこを使用していないので、

std::vector<Word> concordance = push_vector<Word>(data); 

コンパイラはヒントなしでそれを解決することはできません。通常、テンプレートパラメータは、テンプレート関数のパラメータの1つ(またはそれ以上)の型としても使用され、コンパイラはそれを直接解決できます。

関連する問題