2010-06-08 4 views
2

Недавно я сделал утилиты функционировать как:Любой побочный эффект не используется USES_CONVERSION

// T2CA 
#include "ATLCONV.H" 

std::string Utils::CString2String(const CString& cString) 
{ 
#if _MSC_VER > 1200 
    // Convert a TCHAR string to a LPCSTR 
    // construct a std::string using the LPCSTR input 
    CT2CA tmp(cString); 
    std::string strStd (tmp); 
#else 
    // Deprecated in VC2008. 
    // construct a std::string using the LPCSTR input 

    std::string strStd (T2CA (cString)); 
#endif 

    return strStd; 
} 

Я сделал несколько простых тестов, и это, кажется, работает хорошо. Однако, когда я искать в Интернете, я могу видеть, что большинство Обычаи T2CA в VC6 есть предыдущий вызов

USES_CONVERSION; 

Есть ли что-нибудь, что я пропустил? Должен ли я вызвать свою функцию:

#else 
    // Deprecated in VC2008. 
    // construct a std::string using the LPCSTR input 
    USES_CONVERSION; 
    std::string strStd (T2CA (cString)); 
#endif 

ответ

2

В ATL 7.0 USES_CONVERSION не требуется больше. До этого вам нужно было указать макрос USES_CONVERSION, иначе вы получите ошибки компиляции.

+0

Но почему я не получал ошибку компиляции при использовании T2CA? Обратите внимание, что T2CA вызывается с кодовым блоком VC6 (#if _MSC_VER <= 1200) –

+0

Вышеприведенный код может быть скомпилирован как в VC2008, так и в VC6. –

+0

@Yan: Я не уверен, но я помню, прежде чем делать разработку, и если бы я не сказал, я бы получил компиляцию ошибок. И я знаю, что это больше не требуется. Я думаю, можно с уверенностью сказать, что вы можете безопасно использовать код без него, если он компилируется. –

Смежные вопросы