我正在嘗試一個虛擬模板函數的實現。我在將this
指向指向子類模板的指針時有工作,但是當我將*this
引用到子類時,我無法使其工作,爲什麼?C++ bad_cast異常鑄造*這個派生模板類
template <typename T> struct BB; // forward reference (not bound until instantiation in main)
struct AA
{
virtual ~AA(){}
template <typename T>
void operator()(T && t)
{
dynamic_cast<BB<T>*>(this)->operator()(std::forward<T>(t)); // works!
dynamic_cast<BB<T>&>(*this)(std::forward<T>(t)); // compiles but throws bad_cast
}
};
template <typename T>
struct BB : AA
{
void operator()(T t) { std::cout << "BB::operator()" << std::endl; }
};
int main()
{
BB<int> bb;
int k = 5;
static_cast<AA&>(bb)(k);
}
「作品」是什麼意思? –
請同時嘗試'static_cast(bb)(5);':-) –
@KerrekSB,調用'void BB :: operator()(T&t)' – ThomasMcLeod