小编Yip*_*Yay的帖子

如何确定类型是否实现了具有C#反射的接口

是否反映C#报价的方式来确定是否给予一些System.Type款型的一些接口?

public interface IMyInterface {}

public class MyType : IMyInterface {}

// should yield 'true'
typeof(MyType)./* ????? */MODELS_INTERFACE(IMyInterface);
Run Code Online (Sandbox Code Playgroud)

c# reflection interface

527
推荐指数
11
解决办法
20万
查看次数

C++模板构造函数

我希望有一个非模板类,其模板构造函数没有参数.

据我所知,它不可能拥有它(因为它会与默认构造函数冲突 - 我是对的吗?),解决方法如下:

class A{
   template <typename U> A(U* dummy) {
   // Do something
   }
};
Run Code Online (Sandbox Code Playgroud)

也许有更好的替代方案(或更好的解决方法)?

c++ templates constructor

110
推荐指数
5
解决办法
13万
查看次数

如何用GCC和ld删除未使用的C/C++符号?

我需要严格优化可执行文件的大小(ARM开发),我注意到在我当前的构建方案(gcc+ ld)中,未使用的符号不会被剥离.

的用法arm-strip --strip-unneeded为生成的可执行文件/库不改变可执行文件的输出大小(我不知道为什么,也许它根本不能).

修改我的构建管道的方式是什么(如果存在),以便从结果文件中删除未使用的符号?


我甚至都不会想到这一点,但我当前的嵌入式环境并不是非常"强大",甚至500K可以节省2M非常好的加载性能.

更新:

不幸的是,gcc我使用的当前版本没有-dead-strip选项,并且-ffunction-sections... + --gc-sectionsfor ld不会对结果输出产生任何显着差异.

我很震惊,这甚至成了问题,因为我确信gcc + ld应该自动删除未使用的符号(为什么他们甚至要保留它们?).

c c++ gcc strip ld

107
推荐指数
10
解决办法
10万
查看次数

应该添加浮点数以获得最精确的结果?

这是我在最近的采访中被问到的一个问题,我想知道(我实际上并不记得数值分析的理论,所以请帮助我:)

如果我们有一些累积浮点数的函数:

std::accumulate(v.begin(), v.end(), 0.0);
Run Code Online (Sandbox Code Playgroud)

vstd::vector<float>例如,是一个.

  • 在累积它们之前对这些数字进行排序会更好吗?

  • 哪个订单会给出最准确的答案?

我怀疑按升序排序数字实际上会减少数值误差,但不幸的是我无法证明这一点.

PS我确实意识到这可能与现实世界的编程无关,只是好奇.

c++ floating-point precision

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

Gradle - 获取依赖项的最新版本

告诉Gradle以下内容最简单的方法是什么:

检索'junit'依赖关系并采用其最新的'release'版本.

管理Maven和Ivy存储库对我来说有点新鲜.我尝试了以下步骤,导致Could not resolve dependency ...错误:

  • compile "junit:junit:latest.release"用存储库设置为只写mavenCentral() (但是,如果我说"junit:junit:4.10",它就可以工作).

  • compile "junit:junit:latest.release"使用存储库写入以下方式:

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 尝试使用Spring Source Ivy存储库:

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }
    
    Run Code Online (Sandbox Code Playgroud)

也许我误解了一些事情.为什么获得最新版本的依赖是如此艰巨的任务?

java dependencies ivy gradle maven

86
推荐指数
4
解决办法
8万
查看次数

如何初始化struct?

我应该在我的任意结构中实现什么成员才能使以下任务成为可能:

public struct MyStruct {
   String s;
   Int length;
}

MyStruct myStruct = new MyStruct { s = "Hello", length = 5 };

// Now, I want the following code to set the 's' to "Lol" and the
// length to 3 (length of "Lol"). The second part should be done
// automatically.
myStruct = "Lol"; // Or myStruct = String("Lol");
Run Code Online (Sandbox Code Playgroud)

该怎么做?

c# struct initialization

53
推荐指数
3
解决办法
11万
查看次数

优惠券代码生成

我想生成优惠券代码,例如AYB4ZZ2.但是,我还希望能够标记使用过的优惠券并限制其全球数量N.天真的方法就是"生成N独特的字母数字代码,将它们放入数据库并在每个优惠券操作上执行数据库搜索".

但是,据我所知,我们还可以尝试找到一个函数 MakeCoupon(n),它将给定的数字转换为具有预定义长度的类似优惠券的字符串.

据我了解,MakeCoupon应满足以下要求:

  • 是双射的.反向MakeNumber(coupon)应该是有效可计算的.

  • 输出MakeCoupon(n)应该是字母数字,并且应该具有小且恒定的长度 - 因此它可以被称为人类可读的.例如,SHA1摘要不会通过此要求.

  • 实用的独特性.MakeCoupon(n)对于每种天然物的结果n <= N应该在相同的术语中是完全独特的或独特的,例如,MD5是独特的(具有相同的极小碰撞概率).

  • (这个定义很棘手)如何从单个优惠券代码中枚举所有剩余的优惠券并不明显 - 让我们说MakeCoupon(n)并且MakeCoupon(n + 1)应该在视觉上有所不同.

    例如MakeCoupon(n),,n用零填充的简单输出将不符合此要求,因为000001并且000002实际上并不"视觉上"不同.

问:

是否存在满足以下要求的任何功能或函数发生器?我的搜索尝试只引导我使用[CPAN]CouponCode,但它没有满足相应函数的双射要求.

c# algorithm hash coupon

49
推荐指数
3
解决办法
2万
查看次数

着色器中分支的效率

我知道这个问题可能看起来有点没有根据,但如果有人知道任何理论/有关于这个主题的实践经验,那么如果你分享它会很棒.

我正在尝试优化我的一个旧着色器,它使用了大量的纹理查找.

我有三个可能的映射平面中的每一个的漫反射,普通,高光贴图,对于一些靠近用户的面,我还必须应用贴图技术,这也带来了很多纹理查找(如parallax occlusion mapping).

分析表明纹理查找是着色器的瓶颈,我愿意将其中一些删除.对于输入参数的某些情况,我已经知道纹理查找的一部分是不必要的,显而易见的解决方案是执行类似(伪代码)的操作:

if (part_actually_needed) {
   perform lookups;
   perform other steps specific for THIS PART;
}

// All other parts.
Run Code Online (Sandbox Code Playgroud)

现在 - 问题来了.

我不记得确切(这就是为什么我说这个问题可能会不接地),但在某些纸张最近,我读(不幸的是,不记得名字了)类似下面的内容指出:

所提出的技术的性能取决于基于硬件的条件分支 的实施效率.

在我即将开始重构大量着色器并实现我所讨论的if基于优化的优化之前,我记得这种说法.

所以 - 在我开始这样做之前 - 有人知道着色器中分支的效率吗?为什么分支会在着色器中造成严重的性能损失?

甚至有可能我只能通过if基于分支的方式恶化实际性能?


你可能会说 - 试试看.是的,如果这里没有人帮助我,那就是我要做的事:)

但是,在这种if情况下,新GPU可能会有效,对于一些较老的GPU来说可能是一场噩梦.除非你有很多不同的GPU(这不是我的情况),否则很难预测这类问题

所以,如果有人知道这些或具有这些着色器的基准测试经验,我将非常感谢您的帮助.


实际工作的剩余脑细胞几乎没有告诉我,GPU上的分支可能远不如分支CPU(通常具有非常有效的分支预测方法和消除缓存未命中)那么有效,仅仅因为它是GPU(或者说可能很难/不可能在GPU上实现).

不幸的是,我不确定这个陈述是否与实际情况有任何共同之处......

performance shader branch

38
推荐指数
5
解决办法
2万
查看次数

C++模板和内联

当我编写一个简单的(非模板)类时,如果函数实现是"正确"提供的,它会自动被视为inline.

class A {
   void InlinedFunction() { int a = 0; }
   // ^^^^ the same as 'inline void InlinedFunction'
}
Run Code Online (Sandbox Code Playgroud)

在谈论基于模板的类时,这条规则怎么样?

template <typename T> class B {
   void DontKnowFunction() { T a = 0; }
   // Will this function be treated as inline when the compiler
   // instantiates the template?
};
Run Code Online (Sandbox Code Playgroud)

此外,该inline规则如何应用于非嵌套模板函数,例如

template <typename T> void B::DontKnowFunction() { T a = 0; }

template <typename T> inline void B::DontKnowFunction() { T a = 0; } …
Run Code Online (Sandbox Code Playgroud)

c++ templates inline-method

37
推荐指数
2
解决办法
3万
查看次数

C++异常开销

为什么嵌入式平台开发人员不断尝试C++ exceptions从他们的用户中删除使用SDKs

例如,Bada SDK为异常使用建议以下解决方法,它看起来格外难看:

 result
 MyApp::InitTimer()
 {
    result r = E_SUCCESS;

    _pTimer = new Timer;

    r = _pTimer->Construct(*this);
    if (IsFailed(r))
    {
        goto CATCH;
    }

    _pTimer->Start(1000);
    if (IsFailed(r))
    {
        goto CATCH;
    }

    return r;
 CATCH:
     return r;
 }
Run Code Online (Sandbox Code Playgroud)

这种行为的原因是什么?

据我所知,ARM编译器完全支持C++ exceptions,实际上这不是问题.还有什么?是例外的使用和unwindings上的开销ARM平台真的有那么花很多时间做这样的解决方法?

也许其他我不知道的东西?

谢谢.

c++ embedded arm exception overhead

32
推荐指数
5
解决办法
7633
查看次数