Stroustrup提供了一个Can_copy template。它是如何工作的?

template<class T1, class T2> struct Can_copy {
    static void constraints(T1 a, T2 b) { T2 c = a; b = a; }
    Can_copy() { void(*p)(T1,T2) = constraints; }
};

特别是,为什么他需要行void(*p)(T1,T2) = constraints;而不是空的构造函数?是否允许编译器仅生成特定模板实例用作优化的功能?

最佳答案

这是因为在生成的代码中不存在模板中未使用的成员函数,因此要检查约束,您必须在某处显式调用constraints()

这样就生成了constraints()的代码,因此在编译时检查了约束(这就是Can_copy的目的)。

10-08 12:01