C ++ static_assert用于检查模板是否已使用特定类型进行实例化

时间:2017-03-03 10:18:41

标签: c++ templates static-assert

动机:我正在努力警告未来的维护者,如果他们在代码中做了某些事情,他们必须确保做其他事情

请注意,“instantiation”在这里表示模板实例化,而不是实例化的对象。

class A;
class B;

template<class T> void foo() {}
template<class T> class X {};

void f()
{
    foo<A>();   
}

void g()
{
    X<A> x; // ok
    X<B> y; // expecting static_assert here: if instantiated X with a type, 
            // foo must be instantiated with the same type too
}

1 个答案:

答案 0 :(得分:0)

至于你的评论:

  

任何组合都会很好......是的,如果有帮助的话,我可以把这个函数包装在一个类中,但是我找不到那种方法

我无法真正看到解决应该留下什么。

如果你在模板类中有这个功能,比如

template<typename T>
class X {
    static void foo() {
        // Do something involving T
    }
};

已经保证X<A>X<A>::foo()被实例化为相同的类型。