Ale*_*mov 4 c++ templates vector decltype c++11
以下类不编译:
template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>>
class MyContainer
{
public:
std::vector<Key, Allocator> data;
std::vector<std::pair<std::size_t, decltype(data)::size_type>> order;
};
Run Code Online (Sandbox Code Playgroud)
我得到以下编译器错误:
错误:模板参数列表中参数2的类型/值不匹配'template struct std :: pair'
为什么这不能编译,而以下代码工作正常?
template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>>
class MyContainer
{
public:
std::vector<Key, Allocator> data;
std::vector<std::pair<std::size_t, std::size_t>> order;
};
Run Code Online (Sandbox Code Playgroud)
您需要告诉编译器依赖项size_type确实是一个类型(例如,而不是对象):
template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>>
class MyContainer
{
public:
std::vector<Key, Allocator> data;
std::vector<std::pair<std::size_t, typename decltype(data)::size_type>> order;
^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)
std::size_t 不依赖于模板参数,因此在这方面没有歧义.