Хорошо, чего я хочу добиться, так это возможности создать любой класс basic_ios <>, из которого я наследую. Итак, в моем примере я просто хотел создать ofstream для указанного файла.
Это возможно следующим образом:
template<template<typename, class> class basic_ios_type, typename char_type, class traits_type>
class basic_ios_adaptor<basic_ios_type<char_type, traits_type>>
: public basic_ios_type<char_type, traits_type>
{
public:
typedef basic_ios_type<char_type, traits_type> base_type;
template<class create>
basic_ios_adaptor(create& create)
{
create(static_cast<base_type*>(this));
}
};
Надежнее передать указатель на базовый класс, потому что на этом этапе он уже выделен и создан.
Использование:
struct construct
{
void operator()(std::ofstream* o) {
*o = std::ofstream("file");
}
};
construct c;
basic_ios_adaptor<std::ofstream> y(c);
Любой другой обходной путь?