2010-05-15 37 views
0

我有一個類foo與枚舉模板參數,由於某種原因,它鏈接到cpp文件中的ctor的兩個版本。常量模板參數類管理外部鏈接

enum Enum 
{ 
    bar, 
    baz 
}; 

template <Enum version = bar> 
class foo 
{ 
public: 
    foo(); 
}; 

// CPP File 
#include "foo.hpp" 

foo<bar>::foo() { cout << "bar"; } 
foo<baz>::foo() { cout << "baz"; } 

我使用的msvc 2008,這是標準的行爲?
只有類型模板參數無法鏈接到cpp文件?

回答

2

您正在專注於這兩種形式的contstructor。你爲什麼驚訝它將兩個表單鏈接在一起?

+0

也許是因爲沒有引用? – sbi 2010-05-15 22:25:39

+0

因爲通常當我鏈接到模板類時,它的成員不能在cpp文件中實現。 – 2010-05-15 22:26:19

+0

@sbi:僅僅因爲它沒有被引用並不意味着它應該被剝離。編譯器「可能」剝離它,但它絕不保證。 @the_drow:如果您正在專門化模板,則可以在CPP文件中實施成員。 – Goz 2010-05-15 22:28:09