假設您必須編寫一個在客戶端提供的類型上運行的模板庫。另外,假設這個庫真的需要訪問由客戶端提供的類型參數化的全局變量。你將如何去實施這種模式?如何在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. 如何定義全局模板變量AngularDart
- 2. Django,全局模板變量
- 3. 定義全局變量在C局部變量
- 4. 如何在目標c中定義一個全局變量?
- 5. 如何確定刀片模板中的全局變量?
- 6. Javascript - 如何全局定義變量?
- 7. 速度:如何定義全局變量
- 8. 如何定義全局變量?
- 9. 在全局變量內部定義全局變量PHP
- 10. 模板中的全局變量
- 11. Laravel Blade模板中的全局變量
- 12. node.js中Jade模板的全局變量
- 13. 全局變量在PHP模板
- 14. 在VB.NET/VS2008中定義「全局變量」
- 15. 在GoogleScript中定義全局變量
- 16. 在main()中定義全局變量
- 17. 變色龍模板全局變量
- 18. 全局變量未定義
- 19. 定義全局變量
- 20. Javascript定義全局變量
- 21. 全局變量未定義
- 22. 全局變量未定義
- 23. 定義全局變量laravel
- 24. AngularJs定義全局變量
- 25. 常量全局變量的模板
- 26. 在模板標籤中設置全局模板變量
- 27. 如何在django模板中創建一個全局變量?
- 28. 如何防止Symfony 2在模板中設置全局變量?
- 29. CakePHP 3:定義全局變量變量
- 30. mysql自定義全局定義變量