Я хотел бы условно скомпилировать член класса на основе его параметра шаблона класса. У меня есть удобные функции, которые имеют смысл для компилятора только в определенных условиях, поэтому я бы хотел, чтобы компилятор пропустил их, если я могу программно определить, когда это так.
// T is a mathematical type
template <typename T>
class Foo {
public:
// when zero is not clearly defined
void bar(T a, T b, T zero) {
}
// only makes sense if 0 can be cast to T
// will fail otherwise
void bar(T a, T b) {
bar(a, b, 0);
}
}
- Я использую VS2012, поэтому, к сожалению, нет параметров шаблона члена по умолчанию. :(
Каков наилучший способ добиться того, чего я хочу?
#ifdef
— это препроцессорный макрос, поэтому он будет оцениваться до типов шаблонов и, следовательно, до автоспециализаций. - person aruisdante   schedule 09.06.2014bar
.static_assert
во второмbar
может сделать сообщение об ошибке более очевидным. - person aschepler   schedule 09.06.2014