c++ - 使用 C++ 模板作为返回类型/变量名

标签 c++ templates arduino

我正在尝试在函数中使用 arduino-json 库中的模板 StaticJsonDocument 并返回它,但我不知道应该在返回中写入什么type 的参数列表.. 我尝试的所有内容都被认为无效而被拒绝。

StaticJsonDocument<???> toJson(char* c) {

  StaticJsonDocument<256> doc;
  deserializeJson(doc, c);

  return doc;
}

来自 Github 的 StaticJsonDocument 的定义:

#pragma once

#include "JsonDocument.hpp"

namespace ARDUINOJSON_NAMESPACE {

template <size_t desiredCapacity>
class StaticJsonDocument : public JsonDocument {
  static const size_t _capacity =
      AddPadding<Max<1, desiredCapacity>::value>::value;

 public:
  StaticJsonDocument() : JsonDocument(_buffer, _capacity) {}

  StaticJsonDocument(const StaticJsonDocument& src)
      : JsonDocument(_buffer, _capacity) {
    set(src);
  }

  template <typename T>
  StaticJsonDocument(const T& src,
                     typename enable_if<IsVisitable<T>::value>::type* = 0)
      : JsonDocument(_buffer, _capacity) {
    set(src);
  }

  // disambiguate
  StaticJsonDocument(VariantRef src) : JsonDocument(_buffer, _capacity) {
    set(src);
  }

  StaticJsonDocument operator=(const StaticJsonDocument& src) {
    set(src);
    return *this;
  }

  template <typename T>
  StaticJsonDocument operator=(const T& src) {
    set(src);
    return *this;
  }

 private:
  char _buffer[_capacity];
};

}  // namespace ARDUINOJSON_NAMESPACE

最佳答案

鉴于docStaticJsonDocument<256>那是函数返回类型。

虽然在后来的C++标准中(C++14以后),你可以这样写

auto toJson(char* c) {

让编译器为您解决。

关于c++ - 使用 C++ 模板作为返回类型/变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104262/

相关文章:

c++ - 使用相同的 boost :thread variable to create multiple threads

c++ - 按住鼠标左键时未生成 WM_MOUSELEAVE

c++ - 模板表达式和 visual studio 2005 c++

c++ - 错误 : no matching function for call to ‘BSTreeNode<int, int>::BSTreeNode(int, int, NULL, NULL)’ - what's wrong?

c++ - 无法动态更新 LineSeries QML 类型

c++ - libmysqlcppconn.so.5 : cannot open shared object file: No such file or directory

c++ - 我使用 ifstream 的模板函数有什么问题?

c++ - 无法使用 Atmel 寄存器编译 Arduino 代码

C# - 后台工作人员通过串行从 Arduino 连续获取数据

c++ - 在PROGMEM中添加更多数据会中断Arduino Mega 2560上的SPI传输