类模版实例化问题(STL)
相关定义:
template< class char_type, class traits_type >
class basic_message_handler_log
: public std::basic_ostream< char_type, traits_type>
{...}
template< class char_type, class traits_type>
class basic_thread_safe_log
// *** protected, not public !!!
: protected basic_message_handler_log< char_type, traits_type>
{...}
typedef basic_thread_safe_log< char> thread_safe_log;
// 根据数字取得字符串
template< int idxLog> std::string get_out_name(
bool bIsSharedLog,
int_to_type< idxLog> * = NULL /* workaround for VC6 bug */)
{
std::ostringstream out;
out << "out" << (bIsSharedLog ? "sharedthread" : "ownthread")
<< idxLog << ".txt";
return out.str();
}
在VS 2005下:
如下代码可以编译通过:
1、
template< class char_type, class traits_type>
basic_thread_safe_log< char_type, traits_type>
get_log_sharedthread()
{
const basic_string< char_type, traits_type> & strFileName;
static std::ofstream out( strFileName );
static internal_thread_safe_log_sharethread log( out, get_ts_writer(), 1);
return basic_thread_safe_log< char_type, traits_type>( log);
}
2、
template< int idxLog> thread_safe_log templ_get_log_sharedthread(int_to_type< idxLog> * = NULL /* workaround for VC6 bug */)
{
static std::ofstream out( get_out_name< idxLog>( true).c_str() );
static internal_thread_safe_log_sharethread log( out, get_ts_writer(), 10 * ( idxLog + 1) * ( idxLog + 1));
return thread_safe_log( log);
}
如下代码编译失败:
thread_safe_log get_log_sharedthread(const string & strFileName)
{
static std::ofstream out( strFileName );
static internal_thread_safe_log_sharethread log( out, get_ts_writer(), 1);
return thread_safe_log( log);
}
请问为何?
如何修改使编译失败的代码能够通过编译?