使用条目的C++等价?扩展ClassA?为两个以上的java参数扩展ClassB>getEntries()
在java中,我有一个方法:
Set<? extends Entry<? extends ClassA, ? extends ClassB>> getEntries();
我读过关于C++ equivalent of using <T extends Class> for a java parameter/return type的问题
我尝试如下:
template<typename K, typename std::enable_if<std::is_base_of<ClassA, K>::value>::type* = nullptr, typename V, typename std::enable_if<std::is_base_of<ClassB, V>::value>::type* = nullptr> set<pair<K,V>> getEntries()
它编译得很好,但我认为它很长,而且可能是错误的。我不知道是否有更好的解决办法
# 1 楼答案
您只需要调整链接的解决方案,使其适合您的解决方案。你的尝试(从评论中)不太正确。将
enable_if
与模板参数一起使用时,它应该是最后一个参数,并且应该只出现一次。因此,修改在enable_if
之前移动V
的操作,并将enable_if
更改为使用&&
,您将得到:从来都不漂亮。您可以使用
enable_if_t
,因此不需要::type
,但不会节省太多空间。例如: