Это был отличный вопрос! Исследуя это через эту ссылку , я пришел к следующему, которое, по общему признанию, не сильно отличается от предоставленного там решения. Узнай что-нибудь каждый день ... проверяй!
#include
#include
#include
using namespace std;
template
class IsDerivedFrom
{
class No { };
class Yes { No no[3]; };
static Yes Test(B*); // declared, but not defined
static No Test(...); // declared, but not defined
public:
enum { IsDerived = sizeof(Test(static_cast(0))) == sizeof(Yes) };
};
class Base
{
public:
virtual ~Base() {};
};
class A : public Base
{
int i;
};
class B : public Base
{
bool b;
};
class C
{
string z;
};
template
class BasePair
{
public:
BasePair(T1 first, T2 second)
:m_first(first),
m_second(second)
{
typedef IsDerivedFrom testFirst;
typedef IsDerivedFrom testSecond;
// Compile time check do...
BOOST_STATIC_ASSERT(testFirst::IsDerived == true);
BOOST_STATIC_ASSERT(testSecond::IsDerived == true);
// For runtime check do..
if (!testFirst::IsDerived)
cout << "\tFirst is NOT Derived!\n";
if (!testSecond::IsDerived)
cout << "\tSecond is NOT derived!\n";
}
private:
T1 m_first;
T2 m_second;
};
int main(int argc, char *argv[])
{
A a;
B b;
C c;
cout << "Creating GOOD pair\n";
BasePair good(a, b);
cout << "Creating BAD pair\n";
BasePair bad(c, b);
return 1;
}
У меня
Что не так?
Новое
Если вы хотите получить что-то вроде этого
, напишите
\makeatletter
\let \@sverbatim \@verbatim
\def \@verbatim {\@sverbatim \verbatimplus}
{\catcode`'=13 \gdef \verbatimplus{\catcode`'=13 \chardef '=13 }}
\makeatother
Загрузите пакет upquote
, чтобы исправить эту проблему в дословном режиме.
Если вы хотите использовать прямые кавычки в моноширинном текстовом режиме (например, \ texttt {. ..}
) или любым другим шрифтом, то вы можете использовать команду \ textquotesingle
, определенную в пакете textcomp
:
\documentclass{article} \usepackage{upquote,textcomp} \begin{document} \newcommand\upquote[1]{\textquotesingle#1\textquotesingle} \verb|'c'| \texttt{\upquote{h}} \textsf{\upquote{h}} \upquote{h} \end{document}
Это будет хорошо работать для шрифтов в любой кодировке, а не в зависимости от конкретного слота глифа (например, \ char13
в кодировке по умолчанию OT1
).
Для отображения исходного кода вы можете рассмотреть возможность использования пакета listings
; он довольно мощный и предлагает возможность отображать «прямые» кавычки.
Если вы видите фигурные одинарные правые кавычки в дословной среде, то одинарная правая кавычка в шрифте вашей пишущей машинки будет фигурной, и это правильный выбор для что вы делаете (что, как я полагаю, отображает код на языке C).
\textf {`} и \textf {''} довольно близко подходят к прямым кавычкам. Нет необходимости использовать какие-либо специальные пакеты.