如何解决C++:可能与概念相关的错误产生“多分派”
这是怎么回事?使用 testGeneric
参数声明 auto&
的能力似乎会产生一种奇怪的情况,该函数可用于实现多个分派。
在带有“-fconcepts-ts”标志的 gcc 10.1 或更新版本上测试,也可以通过编译器资源管理器在 x86-64 clang(旧概念分支)上运行。
#include <iostream>
void testGeneric(auto &g)
{
g.print();
};
struct Generic
{
bool value = false;
void print() {
std::cout << value << std::endl;
};
};
auto main() -> int
{
auto foo = Generic();
auto bar = []() {
struct Generic
{
int value;
Generic(int v) : value(v){};
void print() {
std::cout << value << std::endl;
};
};
return Generic{123};
}();
auto baz = []() {
struct Generic
{
const char* value;
Generic(const char* v) : value(v){};
void print() {
std::cout << value << std::endl;
};
};
return Generic{"What the... ?"};
}();
testGeneric(foo); // prints 0 (false)
testGeneric(bar); // prints 123
testGeneric(baz); // prints "What the... ?"
};
解决方法
testGeneric
是一个缩写的函数模板。它在功能上等同于模板声明
template <class T>
void testGeneric(T &g)
{
g.print();
};
您的代码将有 3 个不同的 testGeneric
函数,您调用它的每种类型对应一个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。