2

私は C++ を初めて使用しますがusing namespace、ヘッダー ファイルでキーワードを使用するのはよくないと理解しています。テンプレート クラスを作成しようとしていますが、テンプレート クラス メンバー関数の定義がヘッダーにある必要があり、すべてのテンプレート コードが同じ場所にある必要があることを読みました。私の問題は、using namespaceキーワードなしですべてのコードを書くのが面倒になる可能性があることです。たとえば、現時点では次のとおりです。

#ifndef RANDOMTREE_H_
#define RANDOMTREE_H_

template<class T>
class RandomTree {
private:
    typedef double (*funcion_ptr) (T, T);
public:
    RandomTree(std::vector<T> data, std::vector<funcion_ptr>){
        ...
    }
    void train_tree();
};

#endif /* RANDOMTREE_H_ */

しかし、関数本体内でいくつかのブーストメソッドなどを使用するつもりであり、プレフィックスstd::を入力し続ける必要がない方法があるかどうかを知りたいです。boost::

4

3 に答える 3

4

さて、このコードは私にはかなり良さそうです。

それらを宣言に一度書くことは大したことではありません。

定義で を省略したい場合は、関数内にns::を記述してもかまいません。using namespace ns;

または、次のような名前を含めるだけですusing ns::name;。しかし、私はそれをしません。

于 2012-10-16T15:32:05.447 に答える
2

typedefを使用することもできます。

typedef std::string string;

使用しないという利点がありますusing

于 2012-10-16T15:56:56.863 に答える
1

std::修飾子 ( 、boost::)を入力する必要がないというオプションusingディレクティブを使用することです。他の方法があった場合 (この場合はありません)、usingディレクティブがある場合と同じ問題が発生するため、どちらの方法も同様に悪くなります。

using名前空間に適用する必要はないことに注意してください。たとえば、次のことができます。

using std::string;

を直接使用しますstringが、これもお勧めできません。

于 2012-10-16T15:29:59.610 に答える