合并接口,无需合并

Mar*_*sen 16 c++ java type-systems

我在想,C++或Java是否有办法做这样的事情

Interface IF1{
    ....
};

Interface IF2{
    ....
};


function f(Object o : Implements IF1, IF2){
    ...
}
Run Code Online (Sandbox Code Playgroud)

意味着允许您需要实现接口的类型系统.

Fra*_*ulo 28

你可以用Java做到这一点:

public <I extends IF1 & IF2> void methodName(I i){

....

}
Run Code Online (Sandbox Code Playgroud)

这样你就强迫我实现你的两个接口,否则它甚至都不会编译.

  • 谢谢.你是正确的,从语法上来说它应该是'impements',但是在Java泛型(至少我知道)中你没有支持你使用'extends'关键字,无论你是指接口还是类. (2认同)

iam*_*ind 11

在C++中,我们可以使用std::is_base_of<IF1, Derived>.这必须与实际派生类型和基本类型一起使用,并且在tempaltes 的帮助下易于使用.

template<typename T>
void f (T obj)
{
  static_assert(is_base_of<IF1,T>::value && is_base_of<IF2,T>::value,
  "Error: Not implementing proper interfaces.");
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果T(派生class)未落实IF1IF2,然后断言将在编译时失败.