Program Listing for File OpLibraryCoupler.hpp¶
↰ Return to documentation for file (include/sgpl/library/OpLibraryCoupler.hpp)
#pragma once
#ifndef SGPL_LIBRARY_OPLIBRARYCOUPLER_HPP_INCLUDE
#define SGPL_LIBRARY_OPLIBRARYCOUPLER_HPP_INCLUDE
#include <tuple>
#include <utility>
#include "OpLibrary.hpp"
namespace sgpl {
namespace internal {
// adapted from https://stackoverflow.com/a/15418923
template<typename> struct LibraryInstantiator;
template<typename ...T>
struct LibraryInstantiator<std::tuple<T...>> {
using type = sgpl::OpLibrary<T...>;
};
} // namespace internal
template<typename Library, typename... Ops>
class OpLibraryCoupler
: public internal::LibraryInstantiator< decltype(
std::tuple_cat(
std::declval<typename Library::parent_t>(),
std::declval<std::tuple<Ops...>>()
)
) >::type
{};
} //namespace sgpl
#endif // #ifndef SGPL_LIBRARY_OPLIBRARYCOUPLER_HPP_INCLUDE