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)
Класс ЦП
Желание исследовать Hit (если есть) std: function . У меня есть эта структура: [code]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) Класс ЦП [/code] определяется как: [code]struct Cpu { void Clr(word) {}; void Com(word) {}; }; [/code] Что я делаю не так?