在C++中查找宏中变量的类型

xxe27gdn  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(132)

长话短说:我需要找到一个变量的类型来在#if condition宏中使用它。我在提供的示例中的typeof()是一个想象的函数、表达式、代码,我想知道。如果甚至存在...
否则,是否有任何变通方案?
样本代码:

template <class T>
class MyClass
{
    T variable;

public:

#if typeof(T) == typeof(int)
    // compile section A
#elif typeof(T) == typeof(string)
    // compile section B
#endif 

};
hgqdbh6s

hgqdbh6s1#

如果你希望在某些条件下提供一些成员和/或成员函数,一种方法是通过std::conditional_t从实现类继承:

struct MyClassIntImpl {
    void foo() {}
};
struct MyClassStringImpl {
    void bar() {}
};
struct MyClassDefaultImpl {};

template <class T>
class MyClass : public
    std::conditional_t<std::is_same_v<T, int>, MyClassIntImpl,
    std::conditional_t<std::is_same_v<T, std::string>, MyClassStringImpl,
    MyClassDefaultImpl>>
{
// ...

其中MyClassDefaultImpl只是默认情况,根据std::conditional_t的需要而定。
因此,MyClass<int>对象将具有foo()成员函数:

int main() {
    MyClass<int> u;
    u.foo();
}

这比专业化有一些好处:

  • 不需要为N个类型复制和粘贴相同的类
  • 您可以执行std::is_integral_v之类的检查,而使用专门化则无法轻松完成。

相关问题