【发布时间】:2018-08-03 13:01:35
【问题描述】:
基本上我想做的如下。假设我们有一个模板成员函数 foo:
template <typename T>
T SomeClass::foo();
不知何故,用户将 map 作为模板参数传递:
foo<map<string, int>>();
我在这里要做的是,在定义函数 foo 时,获取内部类型,string 和 int。我尝试了很多猜测来取消专业化论点,但无济于事。
template <map<typename K, typename V>>
map<K, V> SomeClass::foo(); // absolutely illegal
我考虑过使用部分特化,但它不起作用,因为 foo 是类成员函数。
【问题讨论】:
-
你的“绝对非法”写错了。你可以做
template <typename K,typename V> map<K,V> SomeClass:foo(); -
T::key_type/T::mapped_type? -
您希望
T是任何类型,还是只有std::map。如果您没有专业,您对foo<int>有什么期望? -
@Jarod42 是的,我希望 T 是任何类型,尽管我会考虑一组有限的容器,例如 map、vector..