2016-11-04 20 views
1

我想知道,如果它是可以做到多种类型的一个变量:可能性定义与基于宏观

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。

+0

是的,这是可能的。在询问是否有可能之前,您应该尝试编译您的代码。 – mascoj

+3

听起来像你需要一个[类模板](http://en.cppreference.com/w/cpp/language/class_template)。 –

+0

@ChrisDrew这可能是正确的做法,除非他需要将MyClass存储在容器中。 – mascoj

回答

3

您可以使用模板建议,但如果你只需要根据条件两种类型之间进行切换,并可以访问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; 
}; 
2

正如评论指出的那样,你不必使用宏的,你可以使用一个模板类来实现这一目标:

template <typename T> 
class MyClass 
    { 
    public: 
    MyClass(); 

    static T myVariable; 
    }; 

然后实例它,你怎么样(例如用于int类型) :

MyClass<int>::myVariable; 
1

为什么不可能呢?这完全有可能。当然,您需要以某种方式在构建中传递该预处理变量,并且将其定义为程序中所有代码的该类型......但它确实完全可能。