2012-03-23 3 views
0

.hファイルでベクトルを宣言したいが、送信するデータの精度によっては、ベクトルがdoubleであるか、タイプが欲しいかもしれないfloat未知の精度のベクトルを宣言する

//tolerances.h 

class verySimple{ 

public: 
    verySimple(); 
    ~verySimple(); 

    void processTolerances(std::vector<double or float> tolerances); 
}; 

私は簡単なレッスンを受けることができますか?おかげさまで

答えて

0

あなたが達成したいことは完全にはっきりしていませんが、あなたの例では、浮動小数点または二重ベクトルを受け入れることができる関数を求めています。

あなたはC++で関数をオーバーロードすることができます

class verySimple{ 
    public: 
     void processTolerances(std::vector<float> tolerances); 
     void processTolerances(std::vector<double> tolerances); 
}; 

その後、適切なものは、引数に応じて呼び出されます。

または、機能テンプレート加えることができます。

template<typename T> 
void processTolerances(std::vector<T> tolerances); 

あるいは、全体としてverySimpleは種類に依存している場合:

template<typename T> 
class verySimple{ 
    public: 
     void processTolerances(std::vector<T> tolerances); 
}; 

選択する方法はverySimpleの性質に依存processTolerances - 一般的な「ベストソリューション」はありません。

4

これはtemplateが対象です。

template <typename T> class verySimpleと言う場合は、void processTolorances(std::vector<T> tolorances);としてください。

テンプレートには、初心者のためのたくさんの問題があるので、チュートリアルをチェックしてください。

+2

もっと適切な場合は、メソッドをクラス全体ではなくテンプレートにすることもできます。 – Jon

0

テンプレートが初めての方は、テンプレートに変換する前に、テンプレート(浮動小数点または倍精度)以外のものを使用してください。ほとんどのコンパイラの警告とエラーは、テンプレートが関係している場合にはあまり有益ではありません。

+0

コンパイラのエラーは、関連するテンプレートにはそれほど有益ではありませんが、もっと複雑です(_much_)。 – leftaroundabout

+0

これはコンパイラによって異なります。それらは何年も前から改善されてきたかもしれませんが、定義時ではなくインスタンス化時のエラーについてだけ教えてくれるたくさんのことに取り組まなければなりませんでした。発生した。 – DRVic

関連する問題