new 在什么情况下会两次返回相同的地址?
为什么以下内容无法编译?它说“错误:‘>’之前预期有主要表达式令牌”。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试
阅读此常见问题解答以获取更多信息:什么是
->模板
、.template
和::template
语法有何不同?Try
Read this FAQ for more information: What is the
->template
,.template
and::template
syntax about?