Std :: function vs Alias ​​Function Pointer, почему человек не компилируетсяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Std :: function vs Alias ​​Function Pointer, почему человек не компилируется

Сообщение Anonymous »

Желание исследовать Hit (если есть) std: function .
У меня есть эта структура:

Код: Выделить всё

struct InstructionDescription
{
std::string name;
word mask;
word code;
std::function func;
word flags;
};
< /code>
И я настрою их вектор, как это < /p>
std::vector instructions_{
{
{"clr",     DD_MASK,        0005000,    &Cpu::Clr},
{"clrb",    DD_MASK,        0105000,    &Cpu::Clr},
{"com",     DD_MASK,        0005100,    &Cpu::Com},

.....
< /code>
работает нормально. Теперь, если я изменю структуру, чтобы использовать указатель функции: < /p>
using InstrFunc = void(*)(Cpu*, word);
struct InstructionDescription
{
std::string name;
word mask;
word code;
InstrFunc func;
word flags;
};
< /code>
, который, насколько я вижу, должен быть эквивалентным. И все же я получаю < /p>
1>C:\work\pdp\mysim\mysim\instructions.h(60,50): error C2664: 'std::vector::vector(std::initializer_list,const _Alloc &)': cannot convert argument 1 from 'initializer list' to 'std::initializer_list'
1>        with
1>        [
1>            _Ty=Cpu::InstructionDescription,
1>            _Alloc=std::allocator
1>        ]
1>        and
1>        [
1>            _Ty=Cpu::InstructionDescription
1>        ]
1>C:\work\pdp\mysim\mysim\instructions.h(60,50): message : Element '1': no conversion from 'initializer list' to '_Ty'
1>        with
1>        [
1>            _Ty=Cpu::InstructionDescription
1>        ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include\vector(512,5): message : see declaration of 'std::vector::vector'
1>Console.cpp
< /code>
vs2019. VS GUI также выделяет строку std :: векторной линии, говоря, что «Инструкция поведения» неизвестна, и что имена функций недоступны (например, CPU :: CLR) 
Класс ЦП 
определяется как:

Код: Выделить всё

struct Cpu {
void Clr(word) {};
void Com(word) {};
};
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/628 ... nt-compile
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»