C++ Template 에 관한 궁금증요...

kknd345의 이미지

상속에서 상위클래스포인터가 하위클래스 포인터를 받아서 다형성을 구현하잖아요.

그런데 Template 도 그런게 가능한가요?

어떤 Template 클래스를 만들었다고 치고요.( 안에 클래스 멤버 함수로 name 이라는 변수 가 있습니다.)

하나는 int 형에 대한 클래스이고요.
다른 하나는 string에 대한 클래스라고 했을때요.

클래스 안에 들어가 있는 name 이라는 변수에 대한 접근을 int클래스 string클래스 구분 안하고 가져 올수 있나요?

ssehoony의 이미지

클래스형에 맞춰서 name 이라는 변수의 형도 정해진다면
사용할 때도 구분해서 사용해야 합니다.

템플릿은 단순히 컴파일 타임때 행해지는 "문자열 replace" 라고 생각하시면 됩니다.
내가 직접 문자열을 해당형으로 replace 했을 때 생길 C++ 코드를 생각해 보면
템플릿들이 컴파일된 후 어떻게 작동하지 예상 할 수 있습니다.

kknd345의 이미지

그럼 혹시 템플릿을 상속 받아서 생성하면 가능한가요?

1%의 가능성이면 충분하다!
최선을 다하자!

happyjun의 이미지

혹시 질문이

template<typename T> class MyType {
public:
  MyType( T myData ) : myData_( myData ) {}
  T myData_;
};

MyType<int> myTypeInt( 1 );
MyType<string> myTypeString( "test" );

일 때

MyType<>* myTypeAny = &myTypeInt;
cout << (myTypeAny->myData_);

이 되는 것인지 궁금하신 것이면 안됩니다.

MyType<int> 와 MyType<string>은 전혀 관계없는 별개의 class 이기 때문입니다.

----------------------------------------
http://moim.at
http://mkhq.co.kr

익명 사용자의 이미지

name 의 타입이 고정적이면 상속을 통해서 가능합니다.

class NamedType
{
public:
    virtual ~NamedType()
    {}

    void SetName(const std::string& str)
    {
        name_ = str;
    }

    const std::string& GetName() const
    {
        return name_;
    }

protected:
    std::string name_;

};

template <typename T>
class SomeType : public NamedType
{
public:
    void SetValue(T orig);
    T GetValue() const;

private:
    T value_;
};
htna의 이미지

happyjun wrote:
MyType<>* myTypeAny = &myTypeInt;
cout << (myTypeAny->myData_);

이게 되나요 ???

MyType<int> intType(1);
MyType<string> stringType("test");

cout << intType._myData_;
cout << stringType._myData;

이거 되지 않나요 ?

WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.