簡體   English   中英

根據宏定義具有多種類型的一個變量的可能性

[英]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
  };

原因是我有兩個類, TypeOneTypeTwo ,它們具有相同的函數變量,但實現方式不同,並且我不想在調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM