やあ@すべて、次の関数呼び出しを実現する必要があります。
std::mt19937 engine;
color_table lut = create_random_color_map(engine);
エンジンは交換可能でなければなりません。次のように実装しようとしました:
*.hpp
#include <tuple>
#include <random>
typedef std::tuple<unsigned char,unsigned char,unsigned char> rgb_tuple;
class color_table{
public:
[...]
void generate(rgb_tuple predicate(const unsigned char& index));
};
template <class RANDOM>
static rgb_tuple random_color(RANDOM engine){
std::uniform_int_distribution<int> dist1 (0,255);
unsigned char red = (unsigned char) dist1();
unsigned char green = (unsigned char) dist1(engine);
unsigned char blue = (unsigned char) dist1(engine);
return std::make_tuple(red, green, blue);
}
template <class RANDOM>
static color_table create_random_color_map(RANDOM engine){
color_table lut;
lut.generate([&](const unsigned char& i)->rgb_tuple {
return random_color<decltype(engine)>(engine);
} );
return lut;
}
* .cpp
...
void color_table::generate(rgb_tuple predicate(const unsigned char& index)){
for(int i = 0; i < 256; ++i){
std::tie(red_table[i], green_table[i], blue_table[i]) = predicate(i);
}
}
コンパイルしようとすると、次のエラーが発生します。
エラー C2664: 'color_table::generate': 'create_random_color_map::' から 'rgb_tuple (__cdecl *)(const unsigned char &)' へのパラメーター 1 の
変換はできませんオペレーターを呼び出すことができません。... 関数テンプレート「color_table create_random_color_map(RANDOM)」。[
RANDOM=std::mt19937 ]で
私たちはその失敗についてまったく無知であり、その場合、グーグルは私たちの友人ではありません! :/
どんな助けにも感謝します!
よろしく ヒュミル