【发布时间】:2020-06-19 08:39:10
【问题描述】:
我正在寻找以下问题的解决方案:
#include <string>
class A
{
public:
template <typename T>
static typename std::enable_if<std::is_same<T, std::string>::value, void>::type foo(T val)
{
printf("std::string\n");
}
template<typename T, typename... Arg>
static void multiple(Arg&&... arg)
{
T::foo(arg...);
}
};
class B : public A
{
public:
template <typename T>
static typename std::enable_if<std::is_same<T, int>::value, void>::type foo(T val)
{
printf("int\n");
}
};
int main()
{
std::string a;
int b = 0;
A::multiple<B>(a, b);
}
如果两个foo 方法都在同一个类中,或者我从适当的类中强制foo (A::foo 用于std::string 和B::foo 用于int),所有工作正常,但是我需要多个类,因为基类必须是可扩展的。我不能使用简单的专业化,因为我需要更多 SFINAE 功能,例如检测 std::pair、std::tuple 等。我也不想将 foo 方法从类移动到命名空间。你有什么想法我该如何解决这个问题?
【问题讨论】:
-
为什么你首先需要所有这些 SFINAE'ing?另外,当您只专注于单参数 foo 时,“multiple”方法有什么用?
-
这只是一个用于更高级目的的简单示例,我正在研究数据类型转换器,并且需要“多个”,因为我想在一次调用中转换所有类型。
标签: c++ templates inheritance sfinae