Nightmare1
@Nightmare1
Программист

Массив объединений, почему ошибка?

Ошибка	C2665	std::vector<std::tuple<std::wstring,void *,std::string>,std::allocator<std::tuple<std::wstring,void *,std::string>>>::push_back: ни одна из 2 перегрузок не может преобразовать все типы аргументов	МашинныйВыполнение	G:\Workspace\cpp.machinarium.gui\Исходники\Машинный\База\Поток.cpp


Возникла ошибка этого кода.

МашинныйОпределениеПсевдоСамоанализаКлассаРеализация(ПотокВыполнения, {

    std::wcout << L"Регистрация мтодов класса ПотокВыполнения\n";
    ЗарегистрироватьНеСтатическийМетодКласса(ПотокВыполнения, запустить, "void()");
    ЗарегистрироватьНеСтатическийМетодКласса(ПотокВыполнения, остановить, "void(bool)");
    ЗарегистрироватьНеСтатическийМетодКласса(ПотокВыполнения, запущен, "bool()");
    ЗарегистрироватьНеСтатическийМетодКласса(ПотокВыполнения, приостановить, "bool()");
    ЗарегистрироватьНеСтатическийМетодКласса(ПотокВыполнения, перезапустить, "bool()");
    ЗарегистрироватьНеСтатическийМетодКласса(ПотокВыполнения, ждатьЗавершения, "void()");

} );


#include <list>
#include <tuple>

/**
 * объявление рефлексии класса 
 */
#define МашинныйОпределениеПсевдоСамоанализаКласса(NAME) \
  public: \
    virtual \
    inline const std::wstring  названиеКласса() { return НазваниеКласса(); } \
    static \
    inline const std::wstring  НазваниеКласса() { return L ## #NAME; } \
  public: \
    МашинныйОбъявлениеСтатическогоБлокаКласса(NAME); \
  public: \
    static std::vector<std::tuple<std::wstring, void*, std::string>> __Список_Методов_Класса; \
    static \
    inline Машинный::Types::ullong СамоанализПолучитьКоличествоДоступныхМетодов() { return __Список_Методов_Класса.size(); }

/**
* Определить в листинке заголовочного файла вызовы регистрации параметров методов и их названий.
*/
#define МашинныйОпределениеПсевдоСамоанализаКлассаРеализация(НАЗВАНИЕ_КЛАССА, БЛОК_КОДА) \
    std::vector< std::tuple<std::wstring, void*, std::string> > НАЗВАНИЕ_КЛАССА ## :: ## __Список_Методов_Класса; \
    МашинныйРеализацияСтатическогоБлокаИнициализацииКласса(НАЗВАНИЕ_КЛАССА, БЛОК_КОДА);

/**
* Макроопределение для регистрации методов класса для перебора и анализа.
*/
#define ЗарегистрироватьНеСтатическийМетодКласса(НАЗВАНИЕ_КЛАССА, НАЗВАНИЕ_МЕТОДА, ПАРАМЕТРЫ_МЕТОДА) \
    __Список_Методов_Класса.push_back(std::make_tuple( std::wstring(L ## #НАЗВАНИЕ_МЕТОДА), &НАЗВАНИЕ_КЛАССА##::##НАЗВАНИЕ_МЕТОДА, std::string(ПАРАМЕТРЫ_МЕТОДА) ));
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nightmare1
@Nightmare1 Автор вопроса
Программист
Решил комментирование указателя на метод класс.а
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы