海蘭@所有, 模板轉換失敗,我們必須實現以下functioncall: 與lambda函數
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':將參數1 從 'create_random_color_map ::' 爲 'rgb_tuple(__cdecl *)(const的無符號字符&)' 不可能1>
沒有用戶定義convertionoperator可用,可以執行 皈依或操作者可以不被調用。 ... 函數模板「color_table create_random_color_map(RANDOM)」。與[
RANDOM =的std :: mt19937]
我們是完全無能,失敗和谷歌是不是我們在這種情況下的朋友! :/
我們感謝任何幫助!
問候 希密爾
它的工作原理!給你! – Hymir
@Hymir:很高興幫助:) –