Я пытался понять работу коды для повышения :: любых и пытался писать следующий кодинстанцирования шаблонного класса от шаблонных функций члена не шаблонного класса
class placeholder
{
public:
virtual ~placeholder() {}
virtual placeholder* clone() const=0;
};
//And this is the wrapper class template:
template<typename ValueType>
class holder : public placeholder
{
public:
holder(ValueType const & value) : held(value) {}
virtual placeholder* clone() const
{return new holder(held);}
private:
ValueType held;
};
//The actual type erasing class any is a handle class that holds a pointer to the abstract base class:
class any
{
public:
any() : content(NULL) {}
template<typename ValueType>
any(const ValueType & value): content(new holder(value)) {}
~any()
{delete content;}
// Implement swap as swapping placeholder pointers, assignment
// as copy and swap.
private:
placeholder* content;
};
int main(int argc, char ** argv) {
return 0;
}
Когда я пытаюсь компиляции кода я получаю следующую ошибку:
test.cxx: In constructor 'any::any(const ValueType&)':
test.cxx:33: error: expected type-specifier before 'holder'
test.cxx:33: error: expected ')' before 'holder'
ошибка выше появляется в строке
any(const ValueType & value): content(new holder(value)) {}
Я не совсем понимаю, почему тип здесь не может быть выведен. Я прочитал Why can I not call templated method of templated class from a templated function, но не смог решить вашу проблему.
Может кто-то помочь.
Удивительный. Благодаря! – deb