【发布时间】:2017-01-07 21:24:26
【问题描述】:
我有一个像这样专门用于函数的 Trait:
template <class Ret, class...Args>
struct FunctionTraits<Ret (*)(Args...)> {
using ReturnType = Ret;
template <std::size_t>
using Parameter = std::tuple_element_t<std::tuple<Args...>>;
};
现在我想在不丢失装饰器的情况下打印函数的签名。
为此,我实现了这样的元函数:
template <class T>
struct GetTypeInfoString {};
它专门用于每种未修饰的类型,但我也想打印修饰的类型。我是这样使用它的:
extern constexpr auto intstr = makeStringLiteral("int");
template <>
struct GetTypeInfoString<int> {
static constexprt auto & value = intstr;
};
现在我已经有了基本信息,我想实现一个 constexpr 函数:
template <class T>
constexpr const char * getTypeInfo() {
//Something here...
}
我的目标是打印带有装饰的字体,而不仅仅是基本字体。即:int const * [][3]等……
【问题讨论】:
-
您是在使用它向用户打印信息还是诊断模板问题?
-
我有一个描述 API 的表,并生成所有元数据。我想打印完整的签名和其他数据。我正在实现一个小型可执行文件,可以查询 API 的参数和其他内容。
标签: c++ metaprogramming c++14 constexpr typeinfo