基于宏定义具有多个类型的一个变量的可能性



我想知道是否可以这样做:

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变量,并且它将被定义为程序中所有代码的类型……但这确实是完全可能的。

最新更新