我发现另一个模板的示例作为参数传递给模板:
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编译器抱怨“分配器:模糊符号”
这是编译器问题还是这段代码有问题?
答案 0 :(得分:2)
你很可能有一个邪恶:
using namespace std;
代码中的某处,这会使您的类模板allocator
与std::allocator
标准分配器发生冲突。
例如,除非您注释包含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;
}