【发布时间】:2011-09-20 21:02:18
【问题描述】:
我不太精通模板。如何编写一个名为 get 的模板函数,该函数根据模板类型选择从中获取的数组?请看下面的例子:
struct Foo
{
int iArr[10];
char cArr[10];
// How to pick array here based on template type?
template < typename T >
T get( int idx )
{
// This does NOT work!
switch ( T )
{
case int:
return iArr[ idx ];
case char:
return cArr[ idx ];
}
}
};
// Expected behaviour of get()
Foo foo;
int i = foo.get< int >( 2 );
char c = foo.get< char >( 4 );
【问题讨论】:
-
您编写它的方式是不可能的,因为您的代码没有任何“通用”。您只需要两个成员的选择器。您可以为此使用普通的类设计。对于真正通用的东西,您可以尝试 boost.variant。
-
Kerrek:这只是一个简单的例子。在我的实际程序中,我有更多类型特定的数组。我不想为所有这些编写单独的函数。
-
所有这些数组都必须是您班级的成员吗?这会很棘手,因为类必须是明确的,但如果你只有有限数量的容器,我觉得模板并不是解决问题的正确领域。
-
考虑修改这个:
template <typename T> struct helper { T arr[10]; T get(std::size_t i) { return arr[i]; } }; struct foo : public helper<int>, public helper<char> {};
标签: c++ template-function