@ songyuanyao ответ действителен.Тем не менее, вы уверены, что хотите использовать свою структуру таким образом?Почему бы просто не использовать наследование и виртуальные методы?:
class base_test {
public:
virtual void t() { std::cout << "test\n"; }
void print() { t(); }
};
и затем вы можете создать его подкласс:
class my_test : base_test {
public:
virtual void t() { std::cout << "my test\n"; }
};
В вашей функции main()
(или где угодно) у вас могут быть функции, возвращающие указатели или ссылки на базовый класс, которыена самом деле экземпляры подклассов.И таким образом, вам не нужно беспокоиться об указателях.
Недостатком является то, что вы должны знать о различных тестах во время компиляции (а затем даже в месте использования, как я только что объяснил).Если вы это сделаете, я бы пошел с общей идиомой.