有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用条目的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) 个答案

  1. # 1 楼答案

    您只需要调整链接的解决方案,使其适合您的解决方案。你的尝试(从评论中)不太正确。将enable_if与模板参数一起使用时,它应该是最后一个参数,并且应该只出现一次。因此,修改在enable_if之前移动V的操作,并将enable_if更改为使用&&,您将得到:

    template<typename K, typename V, typename std::enable_if<std::is_base_of<ClassA, K>::value && std::is_base_of<ClassB, V>::value>::type * = nullptr> 
    std::set<std::pair<K, V>> getEntries();
    

    从来都不漂亮。您可以使用enable_if_t,因此不需要::type,但不会节省太多空间。例如:

    template<typename K, typename V, typename std::enable_if_t<std::is_base_of_v<ClassA, K> && std::is_base_of_v<ClassB, V>> * = nullptr> 
    std::set<std::pair<K, V>> getEntries();