合并接口,而不合并

2022-09-03 03:46:22

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

Interface IF1{
    ....
};

Interface IF2{
    ....
};


function f(Object o : Implements IF1, IF2){
    ...
}

表示一个类型系统,允许您要求实现接口。


答案 1

你可以在Java中做到这一点:

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

....

}

通过这种方式,你强制I实现你的两个接口,否则它甚至不会编译。


答案 2

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

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.");
  ...
}

如果(派生)没有实现 和 ,则断言将在编译时失败。TclassIF1IF2


推荐