【发布时间】: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->func_1();。
【问题讨论】:
-
好吧,在任何派生类中只会调用来自
C的 somefunc(),即使覆盖可用 -
@SeverinPappadeux 是的,但为什么有人要这样做?有什么特别有用的地方吗?这是一种设计模式吗?我以前从未见过这样的事情。
-
我相信它的通用名称是
const_cast hack。 -
想到的设计模式是“做错了”,但了解
somefunc()实际上在做什么会很有用。 -
@Shep 我添加了更多代码。
标签: c++ const-cast