使用C 模板作为返回类型/变量名称



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

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) {

让编译器为您弄清楚。

最新更新