小编Hrv*_*eša的帖子

设计函数f(f(n))== - n

我上次采访时遇到的一个问题:

设计一个函数f,这样:

f(f(n)) == -n
Run Code Online (Sandbox Code Playgroud)

哪里n是32位有符号整数 ; 你不能使用复数运算.

如果您无法为整个数字范围设计此类功能,请将其设计为可能的最大范围.

有任何想法吗?

math integer

841
推荐指数
34
解决办法
8万
查看次数

记录C++/CLI库代码以供c#使用 - 最佳工具和实践?

我正在开发一个项目,其中c ++/cli库主要来自ac#application.

有没有办法让c ++/cli中的代码注释在visual studio中对c#intellisence可见?

假设没有,那么记录c ++/cli代码的最佳方法是什么,以便从c#中更容易使用(当然在c ++/cli中)?您对XML评论vs doxygen与其他工具(哪些)的看法是什么?

documentation doxygen c++-cli documentation-generation

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

确定与其成员相关的C/C++结构的对齐方式

如果已知结构构件的对齐,是否可以找到结构类型的对齐?

例如.对于:

struct S
{
 a_t a;
 b_t b;
 c_t c[];
};
Run Code Online (Sandbox Code Playgroud)

是S = max(alignment_of(a),alignment_of(b),alignment_of(c))的对齐?

在网上搜索我发现"对于结构化类型,其任何元素的最大对齐要求决定了结构的对齐"(在每个程序员应该知道的内存中)但我在标准中找不到任何类似的东西(最新草稿更准确).


编辑: 非常感谢所有的答案,特别是罗伯特·甘博为原始问题提供了一个非常好的答案,以及其他贡献者.

简而言之:

为了确保结构构件的对准要求,结构的对准必须至少与其最严格构件的对准一样严格.

至于确定结构的对齐方式,我们提出了一些选项,经过一些研究,我发现了这个:

  • c ++ std :: tr1 :: alignment_of
    • 尚未标准,但关闭(技术报告1),应该在C++ 0x中
    • 最新草案中存在以下限制:前提条件:T应为完整类型,引用类型或未知范围的数组,但不应为函数类型或(可能是cv-qualified)void.
      • 这意味着我提出的使用C99灵活数组的用例将无法工作(这并不奇怪,因为灵活的数组不是标准的c ++)
    • 在最新的c ++草案中,它是用新关键字的术语定义的 - alignas(具有相同的完整类型要求)
    • 在我看来,如果c ++标准曾经支持C99灵活数组,那么要求可以放宽(结构与灵活数组的对齐不应该根据数组元素的数量而改变)
  • c ++ boost :: alignment_of
    • 主要是tr1替代品
    • 似乎是专门针对void而在这种情况下返回0(这在c ++草案中是禁止的)
    • 来自开发人员的注意事项:严格来说,您应该只依赖于ALIGNOF(T)的值是T的真实对齐的倍数,尽管在实践中它确实在我们所知道的所有情况下计算了正确的值.
    • 我不知道这是否适用于灵活的数组,它应该(可能不起作用,这解决了我的平台上的编译器内在因此我不知道它将如何在一般情况下表现)
  • Andrew Top提出了一个简单的模板解决方案,用于计算答案中的对齐方式
    • 这似乎与boost正在做的非常接近(如果它小于计算的对齐,则boost会另外返回对象大小,因为我可以看到相同的通知
    • 这适用于灵活的数组
  • 使用Windbg.exe找出符号的对齐方式
    • 不编译时,编译具体,没有测试它
  • 在包含该类型的匿名结构上使用offsetof
    • 看到答案,不可靠,不能用c ++非POD移植
  • 编译器内在函数,例如.MSVC __alignof
    • 适用于灵活的数组
    • alignof关键字在最新的c ++草案中

如果我们想要使用"标准"解决方案,我们只限于std :: tr1 :: alignment_of,但如果你将c ++代码与c99的灵活数组混合,这将不起作用.

我认为它只有一个解决方案 - 使用旧的struct hack:

struct S
{
 a_t a; …
Run Code Online (Sandbox Code Playgroud)

c c++ alignment

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

Windows API触发时间同步

是否有一个Windows API可以实现相当于单击"日期和时间属性"/"Internet时间"选项卡中的"立即更新"按钮(通过双击任务栏中的时钟打开)?

有没有办法监视窗口何时触发时间同步以及何时成功或失败?

windows time synchronization ntp

10
推荐指数
1
解决办法
4143
查看次数

WPF TextBox - 以编程方式选择文本,同时保留"选择方向"

在编辑文本时,用户可以使用键盘移位按钮和方向键来修改选择 - 一个位置保持锚定而另一个位置移动.通过向左按压,可以使可移动部分位于锚定部分的左侧.

我试图在WPF的TextBox中修改用户选择(为了讨论的目的,让我说我想成对选择字符,例如,当按Shift +左键时,将选择2个字符,而不仅仅是一个) .但是,当使用SelectionStart/SelectionIndex/CaretIndex/Select时,选择的"movebale end"总是在选择的最右端结束,使shift + left组合无用.

有什么方法可以保留"选择方向"?

wpf textbox caret selection direction

5
推荐指数
1
解决办法
1802
查看次数

c ++扣除"非类型指针函数"类模板参数

考虑一个模板类,如:

template<typename ReturnType, ReturnType Fn()>
class Proxy
{
    void run()
    {
        ReturnType ret = Fn();
        // ... do something ...
    }
};

// and a functions
int fn1() { return 5; }
float fn2() { return 5; }
Run Code Online (Sandbox Code Playgroud)

这可以通过使用以下方式实例化:

Proxy<int, &fn1> p1;
Run Code Online (Sandbox Code Playgroud)

但明确声明返回值类型似乎是不必要的.我想要实现的是:

 someProxyInstantation<&fn1> p1;
 someProxyInstantation<&fn2> p2;
Run Code Online (Sandbox Code Playgroud)

不幸的是,我没有C++预期,这似乎是语言(至少对我来说)一个隐蔽的角落.

如果我可以从函数指针其类型获得 - 这样的:性病:: TR1 ::的result_of <&FN> :: //类型错误1错误C2923: '的std :: TR1 ::的result_of':"FN1 '不是参数'_Fty'的有效模板类型参数

错误是有道理的,因为参数根本不是"类型"

C++ 0x具有decltype(&fn1),但距今已有数年.

在C++ 03(+ tr1)中执行此操作的任何方法?

限制: - 我不想传递仿函数,f1和f2必须保留具有返回值的全局函数(不能将其移动到参数).)

c++ templates result-of decltype

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