如何专门化采用任何类型的模板以允许可变长度数组

史努比·莱恩

甚至不确定这种情况的正确术语是什么。如果我知道,那我可能会找到答案的。

我有一个看起来像的模板化函数

template<typename T> void write(Buffer& b, const T& value);

没有通用的实现,只有显式的专业化。例如

template<> void write<int>(Buffer& b, const int& value) { ... }
template<> void write<const char *>(Buffer& b, const char * const & value) { ... }

到目前为止,一切都很好。但是当然当我打电话时,write(buffer, "hello")我收到一个链接错误的抱怨

undefined reference to `void write<char [6]>(Buffer&, char const (&) [6])'

这个错误对我来说很有意义。但是我无法弄清楚的是如何为此声明一个特殊化。我想要这样的专业化工作要做的就是将char[]参数转换为(const char*)现有的专业化工作。但是我不知道该怎么做。

对于特定的例子,我可以做

template<size_t N> void write<char[6]>(Buffer& b, char const (&value) [6])

但是为每个可能的长度字符串常量定义其中之一显然是不可接受的。但是我尝试了以下方法,其中一些只是为了吸管而抓,而没有一个起作用。

template<size_t N> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<size_t N> template<> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<> template<size_t N> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<template<size_t N>> void write<char const[N]>(Buffer& ob, char const (&value) [N])

什么是正确的咒语?我正在使用GCC 4.7.3 x86_64。

Sfjac

您不能对模板函数进行部分专业化。请参阅此说明,以了解如何对模板化类中的函数进行某种程度的间接访问以解决此限制。

在这种简单的情况下,您还可以通过write调用模板的非模板来获得:

void write(Buffer &b), const char *v)
{
    write<const char *>(b, v);
}

这有效地将内联函数中本来可以与您的模板函数一起使用的类型转换隐藏起来。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何填充和标准化可变长度数组

来自分类Dev

GCC如何实现可变长度数组?

来自分类Dev

如何分配包含可变长度数组的结构?

来自分类Dev

GCC如何实现可变长度数组?

来自分类Dev

动态数组与可变长度数组

来自分类Dev

声明可变长度数组的分配

来自分类Dev

快速访问可变长度数组

来自分类Dev

从函数返回可变长度数组

来自分类Dev

可变长度数组的输出很奇怪?

来自分类Dev

C访问可变长度数组

来自分类Dev

C ++:数组的功能模板专门化

来自分类Dev

如何在0个可变参数上专门化可变模板类?

来自分类Dev

如何通过使用可变参数模板参数来专门化元组的类模板?

来自分类Dev

C ++:使用模板在类中定义可变长度数组

来自分类Dev

如何专门化模板子类?

来自分类Dev

如何专门化模板成员函数?

来自分类Dev

长度为0的可变长度数组?

来自分类Dev

长度为0的可变长度数组?

来自分类Dev

c ++:错误:非POD元素类型的可变长度数组

来自分类Dev

函数原型范围内的可变长度数组类型

来自分类Dev

如何专门化C ++中的可变参数模板函数?

来自分类Dev

byte []数组以可变长度数组进行构造

来自分类Dev

如何在C中的结构中存储可变长度数组

来自分类Dev

编译器如何解析可变长度数组后声明的变量地址?

来自分类Dev

如何将C可变长度数组代码转换为Rust?

来自分类Dev

如何使用numpy在可变长度数组中查找最小值/最大值?

来自分类Dev

如何将Visual Studio用作可变长度数组(VLA)的IDE?

来自分类Dev

编译器如何解析可变长度数组后声明的变量地址?

来自分类Dev

如何将可变长度数组添加到 Vec 中?

Related 相关文章

热门标签

归档