小编Ale*_*uch的帖子

转换参数包类型

我有多个类共享相同的公共typedef,如

struct A { using Container = std::array<A, 3>; };
struct B { using Container = std::vector<B>; };
struct C { using Container = std::array<C, 5>; };
Run Code Online (Sandbox Code Playgroud)

现在我有一个类,它获取一个只包含有效类的参数包,但它必须存储容器的元组.伪代码:

template <typename... Modules>
struct Collector
{
std::tuple<Modules...::Container> mContainers;
};
Run Code Online (Sandbox Code Playgroud)

::Container在打开包装时是否有一种优雅的方式来应用?

c++ templates c++11 c++17

5
推荐指数
1
解决办法
355
查看次数

当函数不存在时,SFINAE回退

我目前正在尝试实现一个toString函数,该函数调用.toString()std::to_string()取决于推导类型可用的函数

到目前为止,我有这个工作片段:

#include <iostream>
#include <string>

template <class T>
auto toString(const T& obj)
        -> decltype(obj.toString(), std::string())
{
  return obj.toString();
}

template <class T>
auto toString(const T& obj)
        -> decltype(std::to_string(obj), std::string())
{
  return std::to_string(obj);
}

template <class T>
auto toString(const T& obj)
        -> decltype(std::string(obj))
{
  return std::string(obj);
}

class Foo{
public:
  std::string toString() const {
    return "Hello";
  }
};

int main()
{
  Foo bar;
  std::cout << toString(bar);
  std::cout << toString(5);
  std::cout << toString("Hello const char*"); …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae enable-if

4
推荐指数
2
解决办法
249
查看次数

标签 统计

c++ ×2

templates ×2

c++11 ×1

c++17 ×1

enable-if ×1

sfinae ×1