Расширяться. Ответ Anyi.9, необходимо также знать различные типы разрыва строки во всеобщем употреблении . Зависящий от того, где Ваш файл произошел, можно хотеть посмотреть на проверку, что Вы ловите все альтернативы...
string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
должен получить Вас движение...
Вы можете использовать this ->
, чтобы прояснить, что вы имеете в виду член класса:
void Bar<T>::BarFunc () {
std::cout << this->_foo_arg << std::endl;
}
В качестве альтернативы вы также можете использовать ", используя
"в методе:
void Bar<T>::BarFunc () {
using Bar<T>::_foo_arg; // Might not work in g++, IIRC
std::cout << _foo_arg << std::endl;
}
Это дает понять компилятору, что имя члена зависит от параметров шаблона, поэтому он ищет определение этого имени в нужных местах. Для получения дополнительной информации также см. эту запись в C ++ Faq Lite .
Кажется, отлично работает в Visual C ++ 2008. Я добавил несколько фиктивных определений для типов, которые вы упомянули, но не указал источника. В остальном именно так, как вы выразились. Затем основная функция для принудительного создания и вызова BarFunc
.
#include <iostream>
class streamable {};
std::ostream &operator<<(std::ostream &os, streamable &s) { return os; }
class foo_arg_t : public streamable {};
class a_arg_t : public streamable {};
class b_arg_t : public streamable {};
template <class T>
class Foo {
public:
Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg)
{
/* do something for foo */
}
T Foo_T; // either a TypeA or a TypeB - TBD
foo_arg_t _foo_arg;
};
template <class T>
class Bar : public Foo<T> {
public:
Bar (const foo_arg_t bar_arg, const a_arg_t a_arg)
: Foo<T>(bar_arg) // base-class initializer
{
Foo<T>::Foo_T = T(a_arg);
}
Bar (const foo_arg_t bar_arg, const b_arg_t b_arg)
: Foo<T>(bar_arg)
{
Foo<T>::Foo_T = T(b_arg);
}
void BarFunc ();
};
template <class T>
void Bar<T>::BarFunc () {
std::cout << _foo_arg << std::endl;
std::cout << Bar<T>::_foo_arg << std::endl;
}
int main()
{
Bar<a_arg_t> *b = new Bar<a_arg_t>(foo_arg_t(), a_arg_t());
b->BarFunc();
}