上下文:当出现以下问题时,我正在讨论C#与Java的工作,我想知道如何(或者如果)在C++中优雅地解决它.
比方说,你有两个类A和B(其细节并不重要),然后有两只模板类G和H描述是这样的:
template <typename T> | template <typename T>
class G | class H
{ | {
public : | public :
T * foo() ; | virtual T * foo() = 0 ;
// etc. | // etc.
} ; | } ;
Run Code Online (Sandbox Code Playgroud)
然后我们有类C和D描述如下:
class A { /* ... */ } ;
class B { /* ... */ } ;
class C : public G<A>, public G<B>
{
} ;
class D : public H<A>, public H<B>
{
// ???
} ;
Run Code Online (Sandbox Code Playgroud)
我希望能够从和foo 调用C方法.我希望能够覆盖来自和的方法.fooG<A>G<B>DfooH<A>H<B>
最后,我希望能够在以下示例中使用C和D:
C c ;
A * a = c.??? ; (I want to call G<A>::foo())
B * b = c.??? ; (I want to call G<B>::foo())
D d ;
A * a = c.??? ; (I want to call H<A>::foo())
B * b = c.??? ; (I want to call H<B>::foo())
Run Code Online (Sandbox Code Playgroud)
总有办法做到这一点(我有一些想法),但我对一系列优雅而安全的方法感兴趣,包括优点/缺点.
那么,你会怎么做?
我能想到的两种方式:
C x;
x.G<A>::foo(); // 1
static_cast<G<A>&>(x).foo(); // 2
Run Code Online (Sandbox Code Playgroud)
即:要么显式限定函数的名称,要么在类型层次结构中进行向上转换.
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |