単純なローカルラムダ関数をオーバーロードする方法は?
元の問題のSSE:
#include <iostream>
#include <map>
void read()
{
static std::string line;
std::getline(std::cin, line);
auto translate = [](int idx)
{
constexpr static int table[8]{ 7,6,5,4,3,2,1,0 };
return table[idx];
};
auto translate = [](char c)
{
std::map<char, int> table{ {'a', 0}, {'b', 1}, {'c', 2}, {'d', 3},
{'e', 4}, {'f', 5}, {'g', 6}, {'h', 7} };
return table[c];
};
int r = translate(static_cast<int>(line[0]));
int c = translate(static_cast<char>(line[1]));
std::cout << r << c << std::endl;
}
int main()
{
read();
return 0;
}
エラーメッセージ
error: conflicting declaration 'auto translate'
note: previous declaration as 'read()::<lambda(int)> translate'
ユーザー入力を確認しないでください。これはSSEです。
translate
同じ名前を再利用できないローカル変数です。