是否可以在 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
}
类似于:
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
}