Здравствуйте, Kernan, Вы писали:
K>Никак, если имя файла задаётся в рантайм.
Если хочется именно в компайлтайм, то что-то вроде этого. Но смысл? то, чего ты хочешь, ты не получишь.
struct obj
{
public:
virtual int foo () = 0;
};
struct A : public obj
{
virtual int foo () {std::cout<<"FOO::A"<<std::endl; return 0;}
};
struct B : public obj
{
virtual int foo () {std::cout<<"FOO::B"<<std::endl; return 0;}
};
template<typename T>
struct entryByFile: public T
{
int entry()
{
return T::make()->foo();
}
};
struct fileA
{
obj* make() {return new A;}
};
struct fileB
{
obj* make() {return new B;}
};
int
main (void)
{
return entryByFile<fileB>().entry();
}