是否可以在C++中使用带有模板参数的宏条件?

Ref*_*ion 4 c++ templates

就像是:

template<bool HOLD_MANUFACTURER>
class Computer {
     int memory;
     int storage;
 #if HOLD_MANUFACTURER
     char *manufacturer;
 #endif
};
Run Code Online (Sandbox Code Playgroud)

我需要这个来创建几乎相同的类的两个变体,当出于性能原因,一个变体是较轻的变体.我不想使用一个单独的类来包装较轻的一个.

如果是,是否可以使用任何类型(不仅仅是上面示例代码中的bool)?也许只是原始类型?枚举怎么样?

这段代码对我不起作用,但我希望我错过了一些小东西.

Mar*_*k B 6

您可以在策略方法中创造性地使用空基础优化来实现您想要的几乎:

struct NO_MANUFACTURER {};
struct HOLD_MANUFACTURER { char *manufacturer; };

template <typename ManufacturerPolicy>
class Computer : public ManufacturerPolicy
{
     int memory;
     int storage;
}
Run Code Online (Sandbox Code Playgroud)

然后实例化为 Computer<HOLD_MANUFACTURER> computer_with_manufacturer;