是否可以在外部“ C”函数中使用模板参数

时间:2018-09-17 12:06:08

标签: c++

我的要求是使用extern“ c”函数从集合中获取项目。方法如下

template<class _Ty,
class _Alloc = allocator<_Ty> >
extern "C" __declspec(dllexport) _Ty* __cdecl GetItem(std::vector<_Alloc>* itr, int index)
{
    if (itr->size() < index)
        return NULL;

    return &itr->at(index);
}

在编译时出现如下错误

error C2988: unrecognizable template declaration/definition

extern方法的使用是使用pinvoke中的c#来获取对象数据

2 个答案:

答案 0 :(得分:9)

不,那不可能。该标准禁止模板及其专业与C链接。引用C ++ 17(N4659)[temp] 17/4:

  

...模板,显式模板   专门化(17.7.3)和类模板部分专门化不得具有C链接。 ...

答案 1 :(得分:0)

实际上不,  在上述模板显式专业化(17.7.3)中,类模板部分专业化不得具有C链接