相关疑难解决方法(0)

静态上下文在C#中总是单一的吗?

我有一个里面有静态字段的库.我想创建一个应用程序并引用这个库,所以我有两个这个静态字段的实例..Net运行时不允许两次引用同一个库,但我想知道是否有可能克服这个限制?

我不允许更改库,但我可以复制/重命名它.

.net c#

54
推荐指数
2
解决办法
2338
查看次数

编译时常量id

鉴于以下内容:

template<typename T>
class A
{
public:
    static const unsigned int ID = ?;
};
Run Code Online (Sandbox Code Playgroud)

我希望ID为每个T生成一个唯一的编译时间ID.我考虑过__COUNTER__并且增强PP库但到目前为止都没有成功.我怎样才能做到这一点?

编辑:ID必须可用作switch语句中的大小写

Edit2:基于静态方法或成员地址的所有答案都不正确.尽管它们确实创建了唯一的ID,但它们在编译时未得到解析,因此不能用作switch语句的情况.

c++ templates template-meta-programming

43
推荐指数
4
解决办法
8410
查看次数

我可以以constexpr方式获取C++类型名称吗?

我想在编译时使用类型的名称.例如,假设我写了:

constexpr size_t my_strlen(const char* s)
{
        const char* cp = s;
        while(*cp != '\0') { cp++; };
        return cp - s;
}
Run Code Online (Sandbox Code Playgroud)

现在我希望:

template <typename T>
constexpr auto type_name_length = my_strlen(typeid(T).name());
Run Code Online (Sandbox Code Playgroud)

但是,唉,typeid(T).name()只是const char*,而不是constexpr ......还有其他一些constexpr方法来获得一个类型的名字吗?

c++ reflection compile-time constexpr c++14

28
推荐指数
2
解决办法
6440
查看次数

在/ OPT:ICF存在的情况下,Visual Studio 2013是否正确优化?

我希望以下程序一直返回0.但是,对于Visual Studio 2013(Update 4),程序在发布版本中退出1.我不确定这是一个错误,还是编译器的优化器是正确的,并且依赖于某些边缘行为.如果关闭CONST宏,则release exe返回0.如果优化器确实正确,我是否可以获得允许它发出代码的原因?

#if 1
#   define CONST const
#else
#   define CONST
#endif


class TypeId {
public:
    bool operator== (TypeId const & other) const
    {
        return id == other.id;
    }

private:
    TypeId (void const * id)
        : id(id)
    {}

public:
    template <typename T>
    static TypeId Get ()
    {
        static char CONST uniqueMemLoc = 0;
        return TypeId(&uniqueMemLoc);
    }

private:
    void const * id;
};


int main(int, char **)
{
    typedef int A;
    typedef unsigned int B;

    if (TypeId::Get<A>() …
Run Code Online (Sandbox Code Playgroud)

c++ optimization c++11 visual-studio-2013

24
推荐指数
2
解决办法
1341
查看次数

强制转换函数指针

假设我有一个功能

void myFun(int*) 
Run Code Online (Sandbox Code Playgroud) 在C++中,以下是什么意思


  ( void(*)(void*) )&myFun

Run Code Online (Sandbox Code Playgroud)

它是一个指向函数的指针,它接受一个(void*)参数并返回一个void?允许这种类型的演员吗?

c++

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