Предоставление функций-членов класса с выведенными типами

Я пытаюсь написать класс интерфейса, в котором пользователь предоставляет свою реализацию в виде DLL. В рамках этого интерфейса есть некоторые функции-члены, которые возвращают выведенный тип, определенный во время выполнения, например:

auto someFunction(int x) -> decltype(auto)

У меня возникли проблемы с предоставлением доступа к этим функциям клиентскому приложению. Я попытался провести некоторое исследование по этому вопросу, и кажется, что наиболее популярным решением для экспорта функций-членов является объявление их виртуальными, чтобы использовать vtable. Я попробовал этот метод, но получил ошибку "виртуальная функция не может иметь выведенный тип возвращаемого значения". Существуют ли альтернативы подходу vtable?

Спасибо.


person JKH    schedule 27.08.2015    source источник
comment
Нет такой вещи, как тип, определяемый во время выполнения. Вывод типа происходит во время компиляции.   -  person molbdnilo    schedule 27.08.2015
comment
@molbdnilo Спасибо за ответ. Я в основном пытаюсь иметь функцию, которая возвращает некоторое значение данных, но с возможностью возвращать любой тип. Функция будет загружаться из DLL, а тип возвращаемого значения будет зависеть от реализации функций в этой DLL. Такое поведение невозможно?   -  person JKH    schedule 27.08.2015
comment
Не могли бы вы объяснить, чего вы пытаетесь достичь, немного подробнее? Может, привести пример?   -  person Simon Kraemer    schedule 27.08.2015


Ответы (1)


То, что вы пытаетесь сделать, невозможно. Виртуальные функции не могут быть шаблонами (и в этом случае вы можете думать о auto как о шаблоне). Причина этого в том, что все выводы типов происходят во время компиляции, поскольку в C++ нет информации о типах во время выполнения. А разрешение виртуальной функции происходит во время компиляции. Техника (не серебряная пуля, но иногда применимая), которую вы ищете, называется type elision.

person SergeyA    schedule 27.08.2015
comment
Спасибо за ответ. Думаю, есть смысл в том, что шаблонные функции не могут быть виртуальными. И теперь я понимаю, что C++ просто не позволяет печатать во время выполнения. Я думаю, что, возможно, неправильно понял новые ключевые слова C++ auto и decltype. - person JKH; 28.08.2015