小编ltb*_*167的帖子

C++可变参数模板,递归decltype

我知道关于这个话题已经有很多问题,但到目前为止,我没有找到令人满意地回答以下问题的回答.给出以下代码.

#include <map>

template<typename T, typename K>
std::map<T, K> map()
{
    return std::map<T, K>();
}

template<typename T, typename...K>
std::map<T, decltype(map<K...>())> map()
{
    return std::map<T, decltype(map<K...>())>();
}


int main(int argc, char **argv)
{
    std::map<int, int> m2 = map<int, int>();
    std::map<int, std::map<int, int>> m3 = map<int, int, int>();    
    std::map<int, std::map<int, std::map<int, int>>> m4 = map<int, int, int, int>();    // <- Compile Error here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打电话给

map<int, int, int>() 
Run Code Online (Sandbox Code Playgroud)

应归还一个物体

std::map<int, std::map<int, int>>
Run Code Online (Sandbox Code Playgroud)

这适用于最多三个模板参数.如代码中所述,调用具有四个模板参数的pair函数失败,g ++(5.1.0)返回以下错误.

main.cpp: In function 'int main(int, char**)': …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-functions variadic-templates c++11

-1
推荐指数
1
解决办法
314
查看次数