提问人:markzzz 提问时间:7/5/2023 最后编辑:markzzz 更新时间:7/5/2023 访问量:59
考虑到继承,我如何通过引用传递?
How can I pass by reference considering inheritance?
问:
这是我的场景(注意我可以编辑的代码,我不能编辑的代码):
#include <iostream>
// the follow is untouchable (from sdk)
struct Base { };
template <class TParamQuantity = Base>
TParamQuantity* configParam(int paramId) { return NULL; }
// the follow is my code (can edit as I want)
struct BaseParamScaler { };
struct LogParamScaler : BaseParamScaler { };
template <BaseParamScaler &T>
struct QRange : Base { };
LogParamScaler gLogParamScaler;
int main()
{
configParam<QRange<gLogParamScaler>>(0);
}
我想知道的是能够将(及其子项)传递给模板方法(来自 sdk)。BaseParamScaler
configParam
有什么方法可以做到这一点吗?或者你会如何以某种奇特的方式做到这一点?C++11
注意:如果通过点/值/任何允许的东西,我可以这样做。但我相信使用模板是强制性的,与他们一起工作。configParam
编辑
第一个似乎有效的方法是添加模板本身的类型名,例如:
template <typename T, T &S>
struct QRange : Base { };
并且比调用:
configParam<QRange<LogParamScaler, gLogParamScaler>>(0);
但我不确定这个解决方案有多优雅。
答: 暂无答案
评论
configParam
configParam
configParam
QRange
configParam
configParam<QRange>(...)->setScaler(gLogParamScaler);
configParam<T>
T
template <auto& Scaler> ...
QRange