当前位置: 首页 > 知识库问答 >
问题:

变量模板类,从其参数列表中获取特定类型的索引

谭安翔
2023-03-14

是否可以实现可变模板类的函数成员,该类从可变参数列表返回给定类型的索引。

我看到的问题是创建某种伪变量参数列表,只是为了触发编译时模板求值。

template<typename... TArgs>
class Foo
{
  template<typename T, typename TArg>
  int _get_idx(int i, const TArg &curr, TArgs...args)
  {
    if (std::is_same(T, TArg)) {
        return i;
    }
    else {
        return get_id(i+1, args...);
    }
  }

用法大概是这样的:

Foo<A, B, C> foo;
int i = foo.get_idx<B>(); // i == 1

共有1个答案

宓诚
2023-03-14

您可以使用以下内容:

template <typename T, typename... Ts> struct get_index;

template <typename T, typename... Ts>
struct get_index<T, T, Ts...> : std::integral_constant<std::size_t, 0> {};

template <typename T, typename Tail, typename... Ts>
struct get_index<T, Tail, Ts...> :
    std::integral_constant<std::size_t, 1 + get_index<T, Ts...>::value> {};

#if 1 // explicit error case, but you already have error without that. 
template <typename T>
struct get_index<T>
{
    // condition is always false, but should be dependant of T
    static_assert(sizeof(T) == 0, "element not found");
};
#endif

实例

注意:您没有指定重复匹配类型会发生什么(所以我选择第一个),也没有指定类型是否不匹配(所以我犯了编译时错误)

带副本的现场演示

 类似资料:
  • 变量通用属性 变量通用属性有title,value,type,tip,rule,message,除了通用属性个别变量还有其它属性,请看每个具体控件; "vars": { "varName1": { "title": "测试 text", /*后台设置时 input 的 label*/ "value": "1", /*变量默认值*/ "type

  • 变量通用属性 变量通用属性有title,value,type,tip,rule,message,除了通用属性个别变量还有其它属性,请看每个具体控件; "vars": { "varName1": { "title": "测试 text", /*后台设置时 input 的 label*/ "value": "1", /*变量默认值*/ "type

  • 我想从传递的几个值动态调用几个“setter”方法。每个方法都将具有字符串,int...要设置的变量类型(例如:setUserName(String userName)或setUserAge(int age))。 在我的例子中,我有一个setter方法“setUse_status(int use_stats)”,我无法配置getDeclaredMethod方法工作。似乎在获取方法时,classVa

  • 问题内容: 有什么方法可以简化此代码,以获取提供的某一列的索引以获取特定行的索引吗?在这种情况下,索引将为,因为我要遍历第一列直到找到“ A”。感觉应该对此有一个linq解决方案,但我无法弄清楚。 问题答案: 如果使用DataTableExtensions.AsEnumerable()方法,则可以使用LINQ查询您的DataTable。然后,您可以用来确定给定谓词的索引:

  • 问题内容: 我需要在其他班上变数。我怎样才能做到这一点? 所以我尝试在Textcl.class中使用,但是得到了。 问题答案: 您将得到空值,因为inString从未按Robert Kilar在注释中正确指出的那样进行初始化。 您可以通过使用类名来引用静态变量。 示例ClassName.variablename。就你而言 运行您的主类。当您运行inString时,将在该类的构造函数中对其进行初始化

  • 问题内容: 假设我具有以下文件结构: data.py core.py 我需要获取data.py文件中定义的所有变量。我该如何实现?我可以使用,但是它返回模块的所有属性,包括等等。 问题答案: 通常是这样做的秘诀,但这引出了问题。