我正在阅读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 ++,但有其他语言的经验。
答案 0 :(得分:4)
像编译器一样思考。 &#34;为函数指针分配约束&#34;强制代码生成,这会强制类型解析,这会强制生成给定类型的赋值运算符。
现在,假设无法解析c=a
或b=a
,因为必需的赋值运算符不适用于给定的一对类型。在这种情况下,编译将失败。