[英]Possibility of defining one variable with multiple types based on a macro
我想知道是否可以這樣做:
class MyClass
{
public:
MyClass();
...
#if defined USE_TYPE_ONE
static TypeOne myVariable;
#else
static TypeTwo myVariable;
#endif USE_TYPE_ONE
};
原因是我有兩個類, TypeOne和TypeTwo ,它們具有相同的函數變量,但實現方式不同,並且我不想在調用myVariable的每個位置使用宏。
編輯
感謝您的及時評論和答復。 我不得不提到MyClass已經在不同的類中使用了很多。 這就是為什么我要避免使用模板。 因為即使使用具有默認模板參數類型的模板類,我也必須對使用MyClass的其他地方使用<>(更改許多其他地方),而無需使用TypeOne。
您可以按照建議的方式使用模板,但是如果您只需要根據條件在兩種類型之間切換並且可以訪問C ++ 11 <type_traits>
(否則請考慮更新編譯器),則可以使用std::conditional
:
#include <type_traits>
constexpr bool USE_TYPE_ONE = true;
struct TypeOne { };
struct TypeTwo { };
class MyClass {
using Type = std::conditional<USE_TYPE_ONE, TypeOne, TypeTwo>::type;
static Type myVariable;
};
正如評論中指出的那樣,您不必使用宏,可以使用模板化類來實現此目的:
template <typename T>
class MyClass
{
public:
MyClass();
static T myVariable;
};
然后根據需要實例化它(例如,對於int
類型):
MyClass<int>::myVariable;
為什么不可能呢? 完全有可能。 當然,您需要以某種方式在構建中傳遞該preproc變量,並且它將被定義為程序中所有代碼的類型...但這確實是完全可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.