Можно ли эмулировать шаблон ?

Возможно ли это как-то? Я хочу, чтобы это включало передачу аргументов во время компиляции. Предположим, это только для удобства пользователя, поскольку можно всегда ввести реальный тип с помощью template , но для некоторых типов, например, функций указателя на член, это довольно утомительно, даже с 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>();
}
17
задан Xeo 22 July 2012 в 20:20
поделиться