static_if是否会弃用模板专精?

Dav*_*vid 5 c++ templates template-specialization static-if c++14

一些通常的模板专业化如下:

template<class T>
class C
{
    void common() { ... }
    void f2 = delete;
};

template<>
class C<int>
{
    void common() { ... }
    void f1() { ... }
};
Run Code Online (Sandbox Code Playgroud)

可以表示static_if为:

template<class T>
class C
{
    void common() { ... }

    static_if(std::is_same<T, int>::value)
    {
        void f1( ) { ... }
    }
    else
    {
        void f2( ) = delete;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是直接竞争的功能吗?模板专业化static_if可以做些什么不可以吗?似乎static_if可以做模板专业化所能做的一切,还有更多.

暂且不说:我不喜欢static_if在这种情况下,因为它可能使得在任何特定情况下你可以使用界面的哪些部分是不明显的.在某些情况下,模板特化仍然可以提供更清晰的语法.

Grz*_*man 10

static if对你不起作用的一件事是使用模板特化的"主要"方式 - 在一个地方提供通用行为,让你的代码用户覆盖(=专门化)它的特定需求/数据类型/等. ..


Dav*_*eas 1

static if功能甚至还没有成为标准。现在,假设相关问题得到解决并将其纳入标准,并且所有编译器都支持它,那么它将只是工具集中的又一个工具。

我可以想象在不同的​​情况下,专业化将使代码更具可读性/可维护性,并且在所有这些情况下,专业化仍然是可行的方法。请注意,最大的优点static if是您可以交错来自不同专业化的代码,但这也可能是一个缺点,因为您可能最终会得到一大堆有条件编译/忽略的代码,而不是拥有多个简单的专业化。