C++17.处理使用 auto 相关的模板参数.代码排序困难
C++17. Dealing with template parameters that are related using auto . Difficulties with code ordering
我正在创建一个类模板,它需要 2 个模板参数,但相关。 一个实例化将用于 mysql 数据库。模板使用 MYSQL 类型初始化,并且 成员函数将返回 MYSQL_RES *。 如果我创建一个带有 2 个参数的模板,这很好用 例如
template<class T,class R> class foo
但由于类是相关的,当指定类型 T 时,类型 R 是已知的。有什么办法可以 编码这个?
使用自动我可以让它工作,例如。
template<class T> class foo{
public:
auto bar();
};
具有成员功能专业化,例如
template<> auto foo<MYSQL>::bar(){MYSQL_RES *r;return r;};
但随后遇到了代码排序问题。 即模板<> auto foo::bar 必须在使用前实现,而不是在单独的 cpp 文件中实现。
我试过做一个前向声明 例如
template<> auto foo<MYSQL_RES>::bar();
但这行不通。
有没有人有优雅的方法来解决这个问题?
谢谢。
您可以创建特征来帮助您:
template<class T> struct myFooTrait;
template<class T> class foo
{
public:
using R = typename myFooTrait<T>::type;
R bar();
};
class MYSQL;
class MYSQL_RES;
template<> struct myFooTrait<MYSQL>
{
using type = MYSQL_RES *;
};
template<>
auto foo<MYSQL>::bar() -> R { MYSQL_RES *r = /*..*/;return r;}
// Other specializations...
相关文章:
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 根据编译时参数在 C 中重复代码
- 扩展C++生成的代码的模板参数类型名称
- 将函数作为参数传递以避免重复代码
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++基于输入参数的动态代码生成
- 调用参数不是原子参数的函数是此代码引发异常的原因吗?
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- C++17.处理使用 auto 相关的模板参数.代码排序困难
- 为什么EclipseCDT代码格式化程序有时会在模板参数中引入空格
- 我写了一个类,它总是将其函数参数委托给它的成员,我该如何改进代码
- 编译器是否C++具有相同模板参数集的每个模板类实例生成代码?
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 如何基于构造函数参数模板化类成员函数的代码
- 在存在错误代码的情况下输出参数与 NRVO
- 在完美转发函数中公开参数类型,避免代码重复
- 中断长代码 snprintf 格式和参数
- 使用 const double* const 作为模板参数 - 代码性能问题