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

Is it possible to use macro conditions with template arguments in C++?

类似于:

template<bool HOLD_MANUFACTURER>
class Computer {
     int memory;
     int storage;
 #if HOLD_MANUFACTURER
     char *manufacturer;
 #endif
};

我需要它来创建几乎相同 class 的两个变体,而出于性能原因,一个变体较轻。我不想使用单独的 class 来包裹较轻的那个。

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

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

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

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

template <typename ManufacturerPolicy>
class Computer : public ManufacturerPolicy
{
     int memory;
     int storage;
}

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

不可能,但您可以使用模板特化和继承:

template <bool HoldManufacturer>
class ComputerAdditions
{};

template <>
class ComputerAdditions<true>
{
protected:
    char *manufacturer;

public:
    // Methods using this additional member
};

template <bool HoldManufacturer = false>
class Computer
    : public ComputerAdditions<HoldManufacturer>
{
    int memory;
    int storage;

public:
    // Methods of Computer
}