相关疑难解决方法(0)

C++和D中的元编程

C++中的模板机制只是偶然地对模板元编程有用.另一方面,D's专门设计用于促进这一点.而且显然它更容易理解(或者我听说过).

我没有D的经验,但是我很好奇,你能用D做什么,而你在模板元编程方面不能用C++做什么?

c++ d metaprogramming

65
推荐指数
8
解决办法
1万
查看次数

如何确保模板参数是所需类型的子类型?

我有一个模板类,我想要做的是以下内容

  1. 仅当传递的模板参数是所需类型的子类型时,才确保实例化对象
  2. 事先与代码的用户沟通模板参数必须满足的内容

(1)如果传递的模板参数不支持该类使用代码的某些功能将无法编译,则会自动处理.但是这个错误可能会很晚才被发现.我希望检查尽可能早.我还想要实现的是,传递的模板参数必须从我提供的基类型派生,这一点应该是显而易见的.

首先,这是误入歧途吗?如果不是我该怎么做?(最简单的方法,C++对我来说还是新手)

感谢stackoverflow,你真的加快了我的C++学习速度.

c++ templates

22
推荐指数
1
解决办法
1万
查看次数

在C++中编译时间类型确定

一位同事最近向我展示了他在网上找到的一些代码.它似乎允许编译时间确定类型是否与另一种类型具有"是"关系.我认为这非常棒,但我不得不承认我对这实际上是如何运作一无所知.任何人都可以向我解释这个吗?

template<typename BaseT, typename DerivedT>
inline bool isRelated(const DerivedT&)
{
    DerivedT derived();
    char test(const BaseT&); // sizeof(test()) == sizeof(char)
    char (&test(...))[2];    // sizeof(test()) == sizeof(char[2])
    struct conversion 
    { 
        enum { exists = (sizeof(test(derived())) == sizeof(char)) }; 
    };
    return conversion::exists;
} 
Run Code Online (Sandbox Code Playgroud)

定义此函数后,您可以像这样使用它:

#include <iostream>

class base {};
class derived : public base {};
class unrelated {};

int main()
{
    base b;
    derived d;
    unrelated u;

    if( isRelated<base>( b ) )
        std::cout << "b is related to base" << std::endl;

    if( isRelated<base>( …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates types

16
推荐指数
4
解决办法
3103
查看次数

检查类是否派生自特定类(编译,运行时两个答案都可用)

这样一个例子更容易解释,

class base {
//....
}

class derived1 : public base {
//...
}
Run Code Online (Sandbox Code Playgroud)

在我的库中,有一个基类指针.库的用户必须创建从base或derived1派生的类,并分配指向该类的指针.

如何检查从哪个类派生的用户定义类?

c++ encapsulation class c++11

8
推荐指数
1
解决办法
2万
查看次数

请帮助我理解这种语法(在C++中实现静态断言)

此语法用作此问题答案的一部分:

template <bool>
struct static_assert;

template <>
struct static_assert<true> {}; // only true is defined

#define STATIC_ASSERT(x) static_assert<(x)>()
Run Code Online (Sandbox Code Playgroud)

我不明白那种语法.它是如何工作的?

假设我这样做

STATIC_ASSERT(true);
Run Code Online (Sandbox Code Playgroud)

它被转换为

static_assert<true>();
Run Code Online (Sandbox Code Playgroud)

怎么办?

c++ syntax templates metaprogramming

6
推荐指数
2
解决办法
967
查看次数

模板可以扩展C++函数中的类吗?

我有一个函数,它有一个模板类作为参数:

template<class T> void scheduleTask(T* a);
Run Code Online (Sandbox Code Playgroud)

但是我希望调用此函数的类扩展类"Runnnable",在Java中你可以通过以下方式实现:

public <T extends Runnable> void scheduleTask(T a);
Run Code Online (Sandbox Code Playgroud)

如果可以,我将如何在c ++中执行此操作?

c++ templates extends class

4
推荐指数
1
解决办法
2801
查看次数