【发布时间】:2021-03-25 10:08:33
【问题描述】:
所以我有一个类似这样的结构:
template<uint8 N>
class SomeStruct { ... };
class Node {
SomeStruct<0> a;
SomeStruct<2> b;
SomeStruct<4> c;
};
我有一个模板函数,它在节点的特定字段上做一些事情:
template<uint8 N>
using NodeFieldPtr = SomeStruct<N> Node::*;
template <uint8 N, NodeFieldPtr<N> F>
void doSomething(Node* node0, Node* node1) { ... }
我觉得不得不再次在doSomething() 上指定“N”很烦人,因为调用它并不优雅:
doSomething<2, &Node::b>(...);
我怎样才能“很好地”告诉编译器不要关心SomeStruct<> 的确切模板参数。类似于通配符。
template <NodeFieldPtr<?> F> //<- unfortunately not C++
void doSomething(Node* node0, Node* node1) { ... }
doSomething<&Node::b>(...);
【问题讨论】:
-
迄今为止最轻松的建议:“C++17 模板
”。但没有很好地描述函数的签名。