new 在什么情况下会两次返回相同的地址?

发布于 2024-10-28 17:59:18 字数 573 浏览 0 评论 0原文

为什么以下内容无法编译?它说“错误:‘>’之前预期有主要表达式令牌”。

template<typename K, typename V>
struct cmpf {
const K& r;
V& visitor;

cmpf(const K& _r, V& _visitor) : r(_r), visitor(_visitor) {}

template<typename T>
void operator()(T& l) {

    if (r.type == a_type(T)) {
        return l == r.get<T>(); // DOES NOT WORK
    } else return false;
}
};

为什么编译器机器人能理解这一点? get() 是一个在类型 K 中定义的带有模板参数的函数。在本例中,我想使用 T 作为参数,但编译器无法识别这一点。当我使用以下代码时,它可以工作(但这是不对的,因为 get 是一个模板函数):

    return l == r.get();

Why does the following not compile? It says "error: expected primary-expression before ‘>’ token".

template<typename K, typename V>
struct cmpf {
const K& r;
V& visitor;

cmpf(const K& _r, V& _visitor) : r(_r), visitor(_visitor) {}

template<typename T>
void operator()(T& l) {

    if (r.type == a_type(T)) {
        return l == r.get<T>(); // DOES NOT WORK
    } else return false;
}
};

Why does the compiler bot understand this? get() is a function defined in type K with a template argument. In this case, I want to use T as the argument, but the compiler does not recognize this. When I use the following instead, it works (but it's not right, since get is a template function):

    return l == r.get();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橪书 2024-11-04 17:59:18

尝试

return l == r.template get<T>();

阅读此常见问题解答以获取更多信息:什么是->模板.template::template 语法有何不同?

Try

return l == r.template get<T>();

Read this FAQ for more information: What is the ->template, .template and ::template syntax about?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文