クライアント提供型で動作するテンプレートライブラリを作成する必要があるとします。また、このライブラリが実際にクライアント提供型でパラメータ化されたグローバル変数にアクセスする必要があるとします。どのようにこのパターンを実装するつもりですか?ここでC++でグローバル変数テンプレートを定義する方法は?
0
A
答えて
0
@AnonymousCoward
これはあなたのソリューションから派生したものです。この変形例の初期化/破壊パターンに注意してください(すでに記憶されていなければ出力を読みます)。あなたはアクセスするまで作成を延期すること、及び(カスタムタイプのために有用であり得る)終了時に破壊し、無料のためにこれを使用することができます。
#include <iostream>
#include <memory>
class t_custom {
public:
t_custom() {
std::cout << "custom ctor: " << __PRETTY_FUNCTION__ << "\n";
}
~t_custom() {
std::cout << "custom dtor: " << __PRETTY_FUNCTION__ << "\n";
}
};
template<typename T>
class Global {
public:
static T* Shared() {
std::cout << "enter: " << __PRETTY_FUNCTION__ << "\n";
static std::auto_ptr<T>pVar(new T);
std::cout << "access: " << __PRETTY_FUNCTION__ << ":\t\t";
return pVar.get();
}
private:
Global();
~Global();
Global(const Global& rhs);
Global& operator=(const Global& rhs);
};
template<typename T>
class Global_orig {
public:
static T* const pVar;
private:
Global_orig();
Global_orig(const Global_orig& rhs);
Global_orig& operator=(const Global_orig& rhs);
};
template<typename T>T* const Global_orig<T>::pVar(new T); // << oh no! global construction
int main(int argc, char* const argv[]) {
std::cout << ">> main: " << __PRETTY_FUNCTION__ << "\n\n";
std::cout << Global<float>::Shared() << "\n";
std::cout << Global<int>::Shared() << "\n";
std::cout << Global<t_custom>::Shared() << "\n";
std::cout << Global_orig<t_custom>::pVar << "\n";
std::cout << "\n<< main: " << __PRETTY_FUNCTION__ << "\n\n";
return 0;
}
クライアントは、工場のファンクタを供給するために、それはまた、良いアイデアかもしれTのデフォルト初期化子を使用するのではなく、
0
は、私はこの動作をエミュレートするために使用するソリューションです:
template <typename T> class Global {
public:
static T *pVar;
private:
Global() {}
Global(const Global& rhs) {}
void operator=(const Global& rhs) {}
};
template <typename T> T* Global<T>::pVar = new T;
私が私の特定のアプリケーションのためにやりたいようです。適用範囲を制限する問題はありますか?
関連する問題
- 1. Cでグローバルな "struct"変数を定義する方法
- 2. 目的変数cでグローバル変数を定義する方法は?
- 3. javascriptで関数のグローバル変数を定義する方法は?
- 4. postExecuteでグローバル変数を定義する方法は?
- 5. 定数グローバル変数のテンプレート
- 6. codeigniterにグローバル変数を定義する方法は?
- 7. nginx confファイルでグローバル変数を定義する方法
- 8. CSSでグローバル変数を定義する方法
- 9. SQLでグローバル変数を定義して使用する方法
- 10. extjsでグローバル変数を定義する方法3.4
- 11. actionscriptでグローバル変数を定義する方法
- 12. WiXでグローバル変数を定義する方法
- 13. djangoテンプレートでグローバル変数を作成する方法は?
- 14. Djangoテンプレートで変数を定義する
- 15. TypeScriptでグローバル関数を定義する方法は?
- 16. Cライブラリでグローバル変数を定義していますか?
- 17. Pythonグローバル変数定義トラブルシューティング
- 18. 静的/グローバル変数、次のように私は私のC++クラスのグローバル変数を定義しているC++
- 19. C++の変数定義と宣言を使用するグローバル
- 20. C異なるファイルで定義された同じグローバル変数
- 21. Alamofire + SwiftyJSONでグローバル変数を定義
- 22. c/C++で定数配列を定義する方法は?
- 23. cのリンカースクリプトで変数定義にアクセスする方法は?
- 24. グローバル関数を正しく定義する方法は?
- 25. テンプレート定義変数を角度コントローラに渡す方法
- 26. そのコントラクタ内でlaravelコントローラクラスのグローバル変数を定義する方法
- 27. ビジー状態のASP.NET MVCでグローバル変数を定義する方法
- 28. as400 ILE Cグローバル変数複数の再定義
- 29. jQuery/Javascript:関数内にグローバル変数を定義するには?
- 30. Symfony2 Twig:twigグローバルを設定せずにテンプレート内でconfig.yml変数を使う方法?