猿问

可以模拟template <auto X>吗?

有可能吗?我希望这样可以启用参数的编译时传递。假设它只是为了用户方便,因为总是可以使用来键入实型template<class T, T X>,但是对于某些类型(例如,指向成员函数的指针),即使使用decltype快捷方式也很繁琐。考虑以下代码:


struct Foo{

  template<class T, T X>

  void bar(){

    // do something with X, compile-time passed

  }

};


struct Baz{

  void bang(){

  }

};


int main(){

  Foo f;

  f.bar<int,5>();

  f.bar<decltype(&Baz::bang),&Baz::bang>();

}

可以将其转换为以下内容吗?


struct Foo{

  template<auto X>

  void bar(){

    // do something with X, compile-time passed

  }

};


struct Baz{

  void bang(){

  }

};


int main(){

  Foo f;

  f.bar<5>();

  f.bar<&Baz::bang>();

}


月关宝盒
浏览 529回答 3
3回答

MMTTMM

这是不可能的。实现的唯一方法是将参数传递给函数:struct Foo{&nbsp; template<class T> void bar(T& X) {}};然后将函数称为f.bar(5);f.bar(&Baz::bang);
随时随地看视频慕课网APP
我要回答