これは、callable を格納するために使用する望ましい (または少なくとも ) ソリューションだと思います (定義済みのクラスを使用する必要はありません) 。std::function
template
#include <iostream>
#include <functional>
struct protocol_callbacks
{
using func_t = std::function<int(uint8_t*, size_t)>;
protocol_callbacks(func_t a_reader, func_t a_writer) :
reader(a_reader),
writer(a_writer) {}
func_t reader;
func_t writer;
};
int writer(uint8_t*, size_t) { return 0; }
int reader(uint8_t*, size_t) { return 0; }
int bad_writer(uint16_t*, size_t) { return 0; }
int main ()
{
protocol_callbacks pc1(reader, writer);
protocol_callbacks pc2([](uint8_t*, size_t) { return 0; },
[](uint8_t*, size_t) { return 0; });
//protocol_callbacks pc3(bad_writer, reader);
}
を使用するbad_writer
と、コンパイルが失敗します ( http://ideone.com/hG7tqc を使用せず、http://ideone.com/roMJgMbad_writer
を使用した場合)。bad_writer