C++编译时检查类型
C++ checking types at compile time
我正在阅读Bjarne Stroustrup关于C++的FAQ,并阅读有关类型参数的约束以及在编译时强制执行某些约束而不会遇到荒谬模板错误的方法,并遇到了这个例子:
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++,但是有其他语言的经验。
像编译器一样思考。"将约束赋值给函数指针"强制代码生成,代码生成强制类型解析,强制生成给定类型的赋值运算符。
现在,假设由于必要的赋值运算符对给定的类型不可用,因此无法解析c=a
或b=a
。在这种情况下,编译将失败。
相关文章:
- C++ 模板类型检查标准::is_same不起作用?
- C++将一个指针分配给另一个指针时执行的类型检查
- 为什么 std::bind 静态类型检查传递给函数的参数?
- 避免使用 std::any 编写相同的重复类型检查代码
- 标准::enable_if类型检查
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- 如果方法不进行类型检查,为什么C++模板匹配?
- 输入数据类型检查循环未按预期工作 (C++)
- 在编译时使用可变参数模板在 c++ 中使用参数类型检查获取函数的参数数
- 标准::键映射和/或 boost::any 类型的值的类型检查
- 类型检查的编译时失败
- 带有类型检查的可变参数模板
- 通过SWIG禁用python-c 接口的隐式类型检查代码
- C++SFINAE运算符/函数结果类型检查
- C 功能返回模板类型检查
- Dynamic_cast类型检查功能没有铸件
- C++模板元编程静态类型检查
- 仅当我提供类型检查规则时才"No type checking rule"错误
- Do模板提供类型检查
- 类型检查:查看变量是继承的还是某个类