如何优雅地传递长类型名称给模板参数?



我正在使用c++17。我有一些像这样的代码:

typedef uint64_t z_hash_t;
struct MoveEdge {
uint64_t dest_hash;
uint32_t times_played;
uint32_t move_key;
std::string pgn_move;
};
struct OpeningTablebase
{
std::unordered_map<z_hash_t, std::shared_ptr<std::vector<MoveEdge>>> m_tablebase;
};
void foo(){
typedef std::__1::unordered_map<z_hash_t, std::__1::shared_ptr<std::__1::vector<MoveEdge>>>::iterator tablebase_iter;
auto root = m_tablebase.find(m_root_hash);
std::queue<tablebase_iter> to_visit;
to_visit.push(root);
}

是否有更好的方法将root的类型传递给std::queue的模板参数?使用typedef来创建别名tablebase_iter似乎比在参数中粘贴整个名称要好一点,但我想知道是否有更简洁/优雅的方法来做到这一点。

我不确定语法,我希望我可以这样做:

std::queue<typeof root> to_visit;

你差点就成功了。您正在寻找decltype:

void foo()
{
auto root = m_tablebase.find(m_root_hash);
//         VVVVVVVVVVVVV
std::queue<decltype(root)> to_visit;
to_visit.push(root);
}

相关内容