是否反映在C#报价的方式来确定是否给予一些System.Type款型的一些接口?
public interface IMyInterface {}
public class MyType : IMyInterface {}
// should yield 'true'
typeof(MyType)./* ????? */MODELS_INTERFACE(IMyInterface);
Run Code Online (Sandbox Code Playgroud) 我希望有一个非模板类,其模板构造函数没有参数.
据我所知,它不可能拥有它(因为它会与默认构造函数冲突 - 我是对的吗?),解决方法如下:
class A{
template <typename U> A(U* dummy) {
// Do something
}
};
Run Code Online (Sandbox Code Playgroud)
也许有更好的替代方案(或更好的解决方法)?
我需要严格优化可执行文件的大小(ARM开发),我注意到在我当前的构建方案(gcc+ ld)中,未使用的符号不会被剥离.
的用法arm-strip --strip-unneeded为生成的可执行文件/库不改变可执行文件的输出大小(我不知道为什么,也许它根本不能).
修改我的构建管道的方式是什么(如果存在),以便从结果文件中删除未使用的符号?
我甚至都不会想到这一点,但我当前的嵌入式环境并不是非常"强大",甚至500K可以节省2M非常好的加载性能.
更新:
不幸的是,gcc我使用的当前版本没有-dead-strip选项,并且-ffunction-sections... + --gc-sectionsfor ld不会对结果输出产生任何显着差异.
我很震惊,这甚至成了问题,因为我确信gcc + ld应该自动删除未使用的符号(为什么他们甚至要保留它们?).
这是我在最近的采访中被问到的一个问题,我想知道(我实际上并不记得数值分析的理论,所以请帮助我:)
如果我们有一些累积浮点数的函数:
std::accumulate(v.begin(), v.end(), 0.0);
Run Code Online (Sandbox Code Playgroud)
vstd::vector<float>例如,是一个.
在累积它们之前对这些数字进行排序会更好吗?
哪个订单会给出最准确的答案?
我怀疑按升序排序数字实际上会减少数值误差,但不幸的是我无法证明这一点.
PS我确实意识到这可能与现实世界的编程无关,只是好奇.
告诉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)也许我误解了一些事情.为什么获得最新版本的依赖是如此艰巨的任务?
我应该在我的任意结构中实现什么成员才能使以下任务成为可能:
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)
该怎么做?
我想生成优惠券代码,例如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,但它没有满足相应函数的双射要求.
我知道这个问题可能看起来有点没有根据,但如果有人知道任何理论/有关于这个主题的实践经验,那么如果你分享它会很棒.
我正在尝试优化我的一个旧着色器,它使用了大量的纹理查找.
我有三个可能的映射平面中的每一个的漫反射,普通,高光贴图,对于一些靠近用户的面,我还必须应用贴图技术,这也带来了很多纹理查找(如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上实现).
不幸的是,我不确定这个陈述是否与实际情况有任何共同之处......
当我编写一个简单的(非模板)类时,如果函数实现是"正确"提供的,它会自动被视为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++ 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平台真的有那么大花很多时间做这样的解决方法?
也许其他我不知道的东西?
谢谢.