SFINAE 작동 방식을 이해하려고합니다. 내 요구 : 나는 activate라는 멤버 함수를 제공하거나하지 않을 수 있습니다 종류의 세트가있다. 주어진 유형에 대해 activate이 존재하면 인수를 허용 할 수 있습니다. 형식의 activate (있는 경우)으로 전달하는 함수를 작성하고 싶다면 그렇지 않으면 간단히 return true입니다. #includ
템플릿 클래스 C<T>A 및 B으로 으로 인스턴스화하려는 템플릿 클래스가 있습니다. C<T>은 foo의 메소드를 가지며, 그 서명은 T이 A 또는 B으로 인스턴스화되었는지 여부에 따라 달라지기를 원합니다. 예를 들어, 다음 코드를 고려하십시오. #include <iostream>
#include <string>
class A {
public:
클래스에 push의 두 가지 구현이 있고 부울 템플릿 인수를 기반으로 선택하겠습니다. 과 같이, this answer에 설명 된대로 나는 SFINAE 원리를 사용하여 시도 : template<class T, bool foo=true>
class Bar {
template <>
typename std::enable_if<foo>::type
나는이 질문에 다음, 아이겐 유형에 대한 템플릿 특수화 몇 가지 함수를 작성하는 것을 시도하고있다 : Eigen: type deduction in template specialization of base-class 나는이 쓴 : #include <type_traits>
#include <Eigen/Core>
namespace isEigenPlainOb
나는 getVector 멤버 함수를 전문으로하고 싶습니다. 이것을 위해 SFINAE를 사용하려고합니다. Dim이 3 이상인 경우에만 작동합니다. template <size_t Dim>
class Mat
{
...
template <size_t VDim, typename enable_if<(Dim > 1 && VDim == 0)>::ty
나는 책을 읽고있다. C++ 템플릿. SFINAE (대체 오류는 오류가 아님)에 대한 설명은 기능 유형을 감지하는 데 사용될 수 있습니다. 코드 예제 : template <typename T>
class IsFunctionT {
private:
typedef char One;
typedef struct { char a[2]; } Two
에 구성원 함수 foo이 있고이 함수가 호출되지 않는 경우 인수 T를 사용하여 템플릿 함수를 작성할 수 있습니까? 무료 함수 foo(T) (그리고 둘 다 존재하지 않으면 컴파일하지 못합니다)? 뭔가 같은 : template<typename T>
int call_foo(T t) {
// if T::foo() exists
return t.foo()
나중에 호출하기 위해 std::function을 저장하는 템플릿 클래스를 작성하고 있습니다. 여기에 simplifed 코드는 다음과 같습니다 template <typename T>
struct Test
{
void call(T type)
{
function(type);
}
std::function<void(
지금은 SFINAE를 배우려고합니다.하지만 강요에 문제가있는 것 같습니다. hasRead<Y> 및 hasRead<Z>은 메서드 인수가 std::uint16_t에 해당하지 않으므로 어떻게해야합니까? ? 내가 원하는대로 작동하도록하려면 어떻게해야할까요? 사전 : #include <cstdint>
#include <iostream>
#include <util