У меня есть класс с упрощенно следующим содержанием:
class SomeClass {
__int64 longVar;
public:
SomeClass();
SomeClass(char *);
SomeClass(int);
}
SomeClass::SomeClass() {
// ...
}
SomeClass::SomeClass(char * str) {
SomeClass();
// делаем что-то
}
SomeClass::SomeClass(int a) {
SomeClass();
// делаем то же, что и в SomeClass(char *)
}
Все работает, но хотелось бы эту конструкцию упростить по возможности. Первое -- вместо вызова SomeClass() написать this() -- но не работает по непонятным причинам. Во-вторых, хочется сократить два перегруженных конструктора SomeClass(char *) и SomeClass(int), реализация которых абсолютно совпадает, в один. Это можно сделать с помощью темплейтов, но чтение мануала на msdn мало что дало в понимании, КАК ИМЕННО применить темплейты в моем случае, то есть ограничить список типов шаблона только char * и int.
И еще вопрос следующего характера. В классе определено свойство longVar с типом __int64, но дело в том, что этот тип поддерживают не все компиляторы. Как сделать какую-нить хитрую штуку (препроцессорные директивы может какие), которая бы проверяла, что если этот тип поддерживается компилятором, значит компилируем, если же нет -- то значит заменяем его на long int?