C++ if constexpr vs 模板特化

C++ if constexpr vs template specialization

考虑这两个例子

示例 1

template<Type type>
static BaseSomething* createSomething();

template<>
BaseSomething* createSomething<Type::Something1>()
{
     return Something1Creator.create();
}

template<>
BaseSomething* createSomething<Type::Something2>()
{
     return Something2Creator.create();
}

.... // other somethings

示例 2

template<Type type>
static BaseSomething* createSomething() 
{
    if constexpr(type == Type::Something1)
    {
        return Something1Creator.create();
    }
    else if constexpr(type == Type::Something2)
    {
        return Something2Creator.create();
    }
    // Other somethings
}

我知道这两个示例在概念上 相同,但考虑到这些功能在 SomethingFactory.hpp 文件中,我的 main.cpp 包含它。

main.cpp 中,我可能只创建类型 Something1 而不知道其他 Something 类型存在。

我真的关心我的可执行文件的大小 最后。您认为我应该采用哪种模式才能使可执行文件的大小最小化?还是这些都没什么大不了的,反正我们都注定了?

What do you think which pattern shall I take for my executable to be at minimal size?

在这两种情况下,如果您只实例化 createSomething<Type::Something1>,您将得到一个实际上是一行代码的函数定义。

I really do care about size of my executable in the end

然后去掉static。模板函数是隐式内联的,但是 static 函数对于每个翻译单元都有唯一的副本。

I know that these two examples are conceptually the same

他们不是。

createSomething<void> 是使用 Example2 定义的函数,使用 Example 1.

未定义