动机:我正在努力警告未来的维护者,如果他们在代码中做了某些事情,他们必须确保做其他事情
请注意,“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
}
答案 0 :(得分:0)
至于你的评论:
任何组合都会很好......是的,如果有帮助的话,我可以把这个函数包装在一个类中,但是我找不到那种方法
我无法真正看到解决应该留下什么。
如果你在模板类中有这个功能,比如
template<typename T>
class X {
static void foo() {
// Do something involving T
}
};
已经保证X<A>
和X<A>::foo()
被实例化为相同的类型。