/////////////////////////////////////////////////////////////////////////////
//===========================================================================
template<typename T>
class Singleton : public T
{
protected:
 Singleton();

public:
 static Singleton<T>& Instance(void);
};

//===========================================================================
template<typename T>
Singleton<T>::Singleton ()
{
}

template<typename T>
Singleton<T>& Singleton<T>::Instance(void)
{
 static Singleton<T> single_instance;

 return single_instance;
}

/////////////////////////////////////////////////////////////////////////////
//===========================================================================
class TestTaskData
{
...
};

/////////////////////////////////////////////////////////////////////////////
//===========================================================================
template class Singleton<TestTaskData>;

명시적으로 템플릿 클래스의 오브젝트 코드를 생성하기 위해서는(Explicit template instantiation)
위의 코드를 cpp에 추가 하면 해당 cpp의 오브젝트 파일에 생성된다.

참고사항> 
#  gcc에서 컴파일 옵션 template instantiation 
   -fimplicit-templates : 묵시적 템플릿 인스턴티에이션을 사용 (템플릿 클래스의 인라인화)
   -fno-implicit-templates : 묵시적 템플릿 인스턴티에이션을 사용 안함
   -frepo : rpo 파일을 통해서 템플릿 인스턴스 db를 생성해서 자동으로 처리

여담>
1. STL 쓰면서 -fno-implicit-templates 옵션 사용하면 죽음이다.
2. msvc++ 생각보다 똑똑한 녀석이었다. ~_~;
3. #pragma interface 와 implementation 살펴보자.

Posted by 셈말짓기 :

# 일반 Class 형
class Data_Class
{
public:
 int value1;
 int value2;
 int value3;

public:
 Data_Class ();
 Data_Class (const Data_Class& o);
 Data_Class& operator=(const Data_Class& rhs);
};

Data_Class::Data_Class ()
{
 value1=0;
 value2=0;
 value3=0;
}

Data_Class::Data_Class (const Data_Class& o)
{
 value1=o.value1;
 value2=o.value2;
 value3=o.value3;
}

Data_Class& Data_Class::operator=(const Data_Class& rhs)
{
 value1=rhs.value1;
 value2=rhs.value2;
 value3=rhs.value3;

 return *this;
}

# Inline Class 형
class Data_Inline_Class
{
public:
 int value1;
 int value2;
 int value3;

public:
 Data_Inline_Class ()
 {
  value1=0;
  value2=0;
  value3=0;
 }


 Data_Inline_Class (const Data_Inline_Class& o)
 {
  value1=o.value1;
  value2=o.value2;
  value3=o.value3;
 }

 Data_Inline_Class& operator=(const Data_Inline_Class& rhs)
 {
  value1=rhs.value1;
  value2=rhs.value2;
  value3=rhs.value3;

  return *this;
 }
};

Posted by 셈말짓기 :

심각하게 공감간다..

2009. 12. 30. 17:05 from 낙서판

Posted by 셈말짓기 :

GetRemovableDrives()

2009. 11. 27. 14:09 from 셈말짓기/Windows


 void GetRemovableDrives (std::vector<std::wstring>& logicalDrives)
 {
  TCHAR  buf[512];
  TCHAR* rootPathName = buf;
  BOOL   hasVolumeInfo;
  UINT   driveType;


  if (0==GetLogicalDriveStrings (512-1, buf))
   return;

  do
  {
   driveType     = GetDriveType (rootPathName);
   hasVolumeInfo = GetVolumeInformation (rootPathName,
              NULL, 0,
              NULL, NULL, NULL,
              NULL, 0);
   if (driveType==DRIVE_REMOVABLE && hasVolumeInfo==TRUE)
   {
    logicalDrives.push_back (std::wstring (rootPathName) );
   }
   while (*rootPathName++);
  } while (*rootPathName);
 }

Posted by 셈말짓기 :

USE [zm]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/** zm_marine_farm
 **/
CREATE PROCEDURE [dbo].[zm_add_gathering_data] (
 @param1 NVARCHAR(32),
 @param2 NVARCHAR(32),
 @param3 FLOAT,
 @param4 FLOAT,
 @param5 FLOAT
) AS
BEGIN
 IF  (SELECT COUNT(TABLE_NAME)  
       FROM INFORMATION_SCHEMA.TABLES  
       WHERE
INFORMATION_SCHEMA.TABLES.TABLE_NAME=@param1) = 0
 BEGIN
  EXEC('CREATE TABLE [dbo].[' + @param1 + '] (
    [gather_time]       [datetime]     NOT NULL,
    [device_node_id]    [nvarchar](16) NOT NULL,
    [water_temperature] [float]        NULL,
    [demand_oxygens]    [float]        NULL,
    [salinity]          [float]        NULL)')
 END

 EXEC('INSERT INTO [dbo].[' + @param1 + '] (
                      [gather_time]      ,
                      [device_node_id]   ,
                      [water_temperature],
                      [demand_oxygens]   ,
                      [salinity]         )
              VALUES (GETDATE(), '''
                      + @param2 + ''','
                      + @param3 + ','
                      + @param4 + ','
                      + @param5 + ')' )
END

Posted by 셈말짓기 :