使用模板函数提供未定义引用的类内的静态char数组的初始化

时间:2019-01-19 16:48:13

标签: c++ arrays static char

问题描述

我试图用静态模板函数创建一个类,以便从其他类中调用它。在类内部,我有一个静态char数组缓冲区和一个带有3个参数的静态encodeEntity函数:

  1. 我要填写的实体

  2. 我想用来填充实体的功能

  3. 我想复制到缓冲区的字符串内容

我要保留缓冲区直到程序结束。我不想在离开函数DE> Entity时丢失它。

我想使用一个简单的类来实例化一个对象,但是它看起来并不漂亮。

我试图解决的问题

我尝试了以下操作:

  • 我将Template函数移到了cpp主体内。据我了解,由于它是模板函数,因此应保留在标头中。当我这样做时,它导致了多个定义编译错误。

  • 我仅将静态成员移动到cpp主体内部以对其进行初始化,因此它也不起作用。

import re
br = re.compile(r"(\r\n|\r|\n)")  # Supports CRLF, LF, CR
content = br.sub(r"<br />\n", content)  # \n for JavaScript
  • 我在类下放置了相同的初始化,但没有用

源代码

char EntityDecode::buffer[2048] = {};

编译错误

class EntityDecoder {
 public:
  EntityDecoder() = delete;

  EntityDecoder(const EntityDecoder &) = delete;

  EntityDecoder &operator=(const EntityDecoder &) = delete;

  ~EntityDecoder() {}

  template <typename Entity, typename DecodeFunction>
  static void decodeEntity(Entity &oEntity, DecodeFunction &decodeFunction, const std::string &iRawContent) {
    size_t length = iRawContent.size();
    for (size_t condentIdx = 0; condentIdx < iRawContent.size(); condentIdx++) {
      buffer[condentIdx] = iRawContent[condentIdx];
    }

    Context content{buffer, iRawContent.size()};
    decodeFunction(oEntity, content);
  }

 private:
  static char buffer[2048];
};

0 个答案:

没有答案