模板参数到模板 - 模糊符号

时间:2013-03-02 14:31:52

标签: c++ templates

我发现另一个模板的示例作为参数传递给模板:

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编译器抱怨“分配器:模糊符号”

这是编译器问题还是这段代码有问题?

1 个答案:

答案 0 :(得分:2)

你很可能有一个邪恶:

using namespace std;

代码中的某处,这会使您的类模板allocatorstd::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;
}