gpt4 book ai didi

c++ - 如何将 std::map 传递给 VS2013 中的可变参数模板?

转载 作者:行者123 更新时间:2023-11-30 02:46:23 24 4
gpt4 key购买 nike

我在 VS2012 Nov CTP 中使用了这段代码:

//.h
template<template <typename...> class Container>
class Test {
typedef Container<unsigned int, TestEntry> L1;
Test();
...
}

//.cpp
template<template <typename...> class Container>
Test<Container>::Test() {}
...
template class Test<std::map>;
template class Test<std::unordered_map>;

//main.cpp
#include "test.h"
#include <map>
#include <unordered_map>
int main()
{
Test<std::map> test;
std::cout << "COMPILES!!!" << std::endl;
return 0;
}

我刚刚更新到 Visual Studio 2013 Ultimate,它无法编译,并出现错误:

'std::map' : too few template arguments

我知道我可以放宽模板要求,例如:

template< typename MapType>

但这对我来说不是一个好的解决方案,因为我唯一想自定义的是容器类型,而不是内容。而且内容比较复杂,每次都要写一个问题。

有没有办法在 VS2013 中解决这个问题?几个小时以来,我一直在尝试修复它,但没有成功。

更新:

要在 VS2013 中准确重现:

//test.h
#include <map>
#include <unordered_map>
template<template <typename...> class Container>
class Test {
typedef Container<unsigned int, unsigned int> L1;
};

//test.cpp
#include "test.h"
template<> class Test<std::map> {
public:
typedef std::map<unsigned int, unsigned int> L1;
};
template<> class Test<std::unordered_map> {
public:
typedef std::unordered_map<unsigned int, unsigned int> L1;
};

//main.cpp
#include "test.h"
#include <iostream>
#include <cmath>
#include <map>
#include <unordered_map>
int main()
{
Test<std::map> test3;
std::cout << "COMPILES!!!" << std::endl;
return 0;
}

最佳答案

你错过了<>在专业领域:

template<> class Test<std::map>
{
...
};
template<> class Test<std::unordered_map>
{
...
};

更新:

A full specialization is introduced with a sequence of three tokens: template, < and >. The same prefix is also needed to declare full function template specializations. Earlier designs of the C++ language did not include this prefix, but the addition of member templates required additional syntax to disambiguate complex specializations. [C++ Templates, Vandervoorde et al. page 190].

关于c++ - 如何将 std::map 传递给 VS2013 中的可变参数模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23626290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com