【问题标题】:terminology or design pattern name术语或设计模式名称
【发布时间】:2015-07-26 21:22:27
【问题描述】:

我正在阅读一个源代码,其中有一个类定义如下:

template<typename T>
class C {
    ...
    T * func() {
        const_cast<C *>(this)->somefunc();
        ...
    }
};

我无法理解这种语法的原理或目的。这是什么,这种代码的应用是什么?我想知道它的正式术语/定义或设计模式。

编辑:

somefunc()实现如下:

void somefunc() {
    anotherfunc(*this);
}

anotherfunc() 是:

template<typename T>
inline void anotherfunc(C<T> & a)
{
    throw std::runtime_error(std::string("blah blah blah")
                             + typeid(T).name());
}

然后在代码中有如下类:

class F {
    func_1();
    func_2();
    func_3();
}

C 是这样实例化的:

C<F> inst;

然后F 中的函数被访问inst-&gt;func_1();

【问题讨论】:

  • 好吧,在任何派生类中只会调用来自 C 的 somefunc(),即使覆盖可用
  • @SeverinPappadeux 是的,但为什么有人要这样做?有什么特别有用的地方吗?这是一种设计模式吗?我以前从未见过这样的事情。
  • 我相信它的通用名称是const_cast hack
  • 想到的设计模式是“做错了”,但了解somefunc()实际上在做什么会很有用。
  • @Shep 我添加了更多代码。

标签: c++ const-cast


【解决方案1】:

如果一个目标是重定向 API 以使用现有 API,而不强制客户端更改代码。

如果你能提供更多关于

  • somefunc() 声明。
  • 任何类层次结构。

帮助我们确定真正的需求。

【讨论】:

    【解决方案2】:

    这种设计模式称为依赖注入。

    【讨论】:

    • 嗯?!一直认为 DI 是您不自己构造子对象,而是依靠某人来构造它并将其传递给您的地方
    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2010-11-29
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2011-02-01
    相关资源
    最近更新 更多