因此,在这个传奇中还有另一个问题。Guillaume Racicot足够出色,可以为我提供另一个解决方法,因此这是我基于以下问题得出的代码:
struct vec
{
double x;
double y;
double z;
};
namespace details
{
template <typename T>
using subscript_function = double(*)(const T&);
template <typename T>
constexpr double X(const T& param) { return param.x; }
template <typename T>
constexpr double Y(const T& param) { return param.y; }
template <typename T>
constexpr double Z(const T& param) { return param.z; }
}
template <typename T, typename = void>
constexpr details::subscript_function<T> my_temp[] = { &details::X<T>, &details::Y<T> }; …Run Code Online (Sandbox Code Playgroud) c++ templates template-specialization enable-if template-variables
我有一个使用两个变量的仪表板:
$clients是一个静态列表,是使用(类似于)$running_sessions的 MySql 查询的结果。$clientsselect id from sessions where client_id in ($clients)
我有一行按每个客户端重复定义,如下所示:
在行内,我有一个使用$running_sessionsPrometheus 数据源的面板。
sum without(instance) (metrics{module="XXX",category="XXX",name="RunStatus",id=~"$running_sessions"})
Run Code Online (Sandbox Code Playgroud)
如果All选择$clients,我会为每个客户端获取一行(预期),但面板显示所有客户端的会话,而不是该行客户端的会话。
我期望$running_sessions特定行上的值将使用 的本地值来计算$clients。
有办法实现这一点吗?
是否可以在类中创建非静态模板字段?
如果没有,如何解决?
应根据需要在编译时创建此类字段.
我有很多的B-class一样B1,B2,B3.
(在实际情况中,他们有更有意义的名字.)
我想创建一个类D有非静态模板函数add<BX>()是必须counter++每次我称呼它,每一个人的时间BX,对于D的特定情况下
(在现实情况下,它确实有些事情更复杂.)
这是一个实现它的工作演示.
可悲的是,我现在有硬编码每一个BX,一个接一个(B1,B2,B3内部)D: -
class B1{};class B2{};class B3{};
class Counter{
public: int counter=0;
};
template<class BX>class Tag{};
class D{
Counter countB1;
Counter countB2;
Counter countB3;
public: template<class BX> void add(){
add_(Tag<BX>());
}
private:
void add_(Tag<B1>){ countB1.counter++;}
void add_(Tag<B2>){ countB2.counter++;}
void add_(Tag<B3>){ countB3.counter++;}
public: …Run Code Online (Sandbox Code Playgroud) class value {
template<typename T> T value_1;
float value_2;
public:
template<typename T> void Set1(T first) {
value_2 = (float)0;
value_1 = first;
}
void Set2(float second) {
value_2 = second;
}
float Get2() {
return this->value_2;
}
template<typename T> T Get1() {
return value_1;
}
};
Run Code Online (Sandbox Code Playgroud)
Value_1给出一个错误,说只允许静态数据成员模板。有没有办法保持value_1没有类型?
我想知道在编写类似以下内容时是否可以推导或忽略值模板参数的类型:
enum class MyEnum {A, B}
enum class MyOtherEnum {X, Y}
template <typename T, T value>
struct GenericStruct {};
Run Code Online (Sandbox Code Playgroud)
当使用MyGenericStruct两者时T,value必须传递 and ,但T可以从上下文中推断出来typename T = decltype(value),除非value尚未定义。template <auto value>也不工作。
有没有什么方法可以简单地编写MyGenericStruct<MyEnum::A>而不MyGenericStruct<MyEnum, MyEnum::A>使用宏?