C ++在编译时检查类型

时间:2018-04-18 01:31:22

标签: c++ templates types constraints

我正在阅读Bjarne Stroustrup关于C ++的常见问题解答,并阅读有关类型参数的约束以及在编译时强制执行某些约束的方法,而不会出现荒谬的模板错误,并且来自这个例子:

 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;
        }
    };

但是,我不太确定在编译时如何评估这个?什么是使用赋值函数指针?这是某种隐式的约束调用吗?

很抱歉,如果这是一个显而易见的问题,实际上只有两天阅读C ++,但有其他语言的经验。

1 个答案:

答案 0 :(得分:4)

像编译器一样思考。 &#34;为函数指针分配约束&#34;强制代码生成,这会强制类型解析,这会强制生成给定类型的赋值运算符。

现在,假设无法解析c=ab=a,因为必需的赋值运算符不适用于给定的一对类型。在这种情况下,编译将失败。