我发现了另一个作为参数传递给模板的模板的示例:
template<template<typename T> class AllocatePolicy>
struct Pool {
void allocate(size_t n) {
int *p = AllocatePolicy<int>::allocate(n);
}
};
template<typename T>
struct allocator { static T * allocate(size_t n) { return 0; } };
int main()
{
// pass the template "allocator" as argument.
Pool<allocator> test;
return 0;
}
这对我来说似乎完全合理,但是MSVC2012编译器抱怨“分配器:歧义符号”
这是编译器问题还是此代码有问题?
最佳答案
您很可能有罪恶:
using namespace std;
在代码中的某个位置,这会使类模板
allocator
与std::allocator
Standard分配器发生冲突。例如,除非您注释包含using指令的行,否则此代码不会编译:
#include <memory>
// Try commenting this!
using namespace std;
template<template<typename T> class AllocatePolicy>
struct Pool {
void allocate(std::size_t n) {
int *p = AllocatePolicy<int>::allocate(n);
}
};
template<typename T>
struct allocator { static T * allocate(std::size_t n) { return 0; } };
int main()
{
Pool<allocator> test;
}
关于c++ - 模板参数到模板-不明确的符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15175613/