小编Gil*_*il'的帖子

我可以在没有实例化的情况下使用函数对象吗?

拥有以下代码:

template<typename T, typename OutStream = std::ostream> struct print {
  OutStream &operator()(T const &toPrint, OutStream &outStream = std::cout) const {
    outStream << toPrint;
    return outStream;
  }
};
Run Code Online (Sandbox Code Playgroud)

这个电话是错误的:

print<int>(2);
Run Code Online (Sandbox Code Playgroud)

错误信息:

1>main.cpp(38): error C2440: '<function-style-cast>' : cannot convert from 'int' to 'print<T>'
1>          with
1>          [
1>              T=int
1>          ]
1>          No constructor could take the source type, or constructor overload resolution was ambiguous
Run Code Online (Sandbox Code Playgroud)

这个电话没有错误:

print<int> intPrinter;
intPrinter(2);
Run Code Online (Sandbox Code Playgroud)

我可以在没有实例化的情况下以某种方式使用函数对象吗?我不能在这里使用模板功能,因为我需要部分专业化功能.

c++ templates constructor function-object

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

为什么Object.hashcode()在Java中存在冲突?

我在Windows XP上的Hotspot JDK 1.6中运行下面的代码,我运行了两次,我得到了下面的结果.

所以基本上似乎object.hashcode()也有冲突?看起来它没有返回VM中的内存地址.

但是,JDK中的一条评论说价值观应该是截然不同的,任何人都可以解释一下吗?

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但Java TM编程语言不需要此实现技术.)

@return  a hash code value for this object.
@see     java.lang.Object#equals(java.lang.Object)
@see     java.util.Hashtable
Run Code Online (Sandbox Code Playgroud)

这是第一个结果:

i,hashcode(): 361,9578500
i,hashcode(): 1886,9578500
conflict:1886, 361
i,hashcode(): 1905,14850080
i,hashcode(): 2185,14850080
conflict:2185, 1905
9998
Run Code Online (Sandbox Code Playgroud)

这是第二个结果:

i,hashcode(): 361,5462872
i,hashcode(): 1886,29705835
conflict:1887, 362
i,hashcode(): 1905,9949222
i,hashcode(): 2185,2081190
conflict:2186, 1906
9998
10000
Run Code Online (Sandbox Code Playgroud)

我的代码:

@Test
    public void testAddr()
    {
        Set<Integer> s = new TreeSet<Integer>();
        Map<Integer, Integer> m = new TreeMap<Integer, Integer>();
        Set<Object> os = new HashSet<Object>();

        for(int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

java hashcode

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

C++ 中的友元方法“未在此范围内声明”

首先提供一些上下文,这是针对涉及信号量的赋值。我们要找到哲学家就餐问题的代码,让它发挥作用,然后进行一些分析和操作。但是,我遇到了一个错误。

原始代码取自http://www.math-cs.gordon.edu/courses/cs322/projects/p2/dp/ ,使用C++解决方案。

我在 Code::Blocks 中收到的错误是

philosopher.cpp|206|error: 'Philosopher_run' was not declared in this scope|
Run Code Online (Sandbox Code Playgroud)

并且此错误发生在该行中:

if ( pthread_create( &_id, NULL, (void *(*)(void *)) &Philosopher_run,
         this ) != 0 )
Run Code Online (Sandbox Code Playgroud)

我查找了 pthread_create 方法,但无法修复此错误。如果有人可以向我解释如何纠正这个错误,以及为什么会发生这个错误,我将不胜感激。我试图仅提供相关代码。

class Philosopher
{
private:
    pthread_t   _id;
    int     _number;
    int     _timeToLive;

public:
    Philosopher( void ) { _number = -1; _timeToLive = 0; };
    Philosopher( int n, int t ) { _number = n; _timeToLive = t; };
   ~Philosopher( void )     {};
    void getChopsticks( void );
    void releaseChopsticks( void …
Run Code Online (Sandbox Code Playgroud)

c++ scope class friend

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

Scheme:使用不带递归的抽象列表函数

我怎么能写使用抽象列表功能的功能(foldr,foldl,mapfilter)不递归消耗号码列表(list a1 a2 a3 ...),并产生交替的总和a1 - a2 + a3 ...

scheme

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

如何为交互式python设置默认的PS1值?

我正在尝试着色我的python解释器,以帮助在视觉上分离文本噪音.因此,如果我启动交互式python,它会给我纯文本.我可以做这个:

import sys

sys.ps1 = "\033[0;34m>>> \033[0m"
sys.ps2 = "\033[1;34m... \033[0m"
Run Code Online (Sandbox Code Playgroud)

但是,如果我退出解释器并返回值,则恢复为默认值,这丝毫不足为奇.我的问题是如何保存这些值并将其用作默认值?

python interactive prompt

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

如何呈现big_int?

我正在使用big_int类型.我查看了OCaml的图书馆Pervasives.

例如:in Int32

let t = 5l
Printf.printf "%ld" t
Run Code Online (Sandbox Code Playgroud)

如何定义t以及%?d如果我要声明它是big_int哪个?

ocaml bignum

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

如何在C++字体库中支持不同的OpenGL版本/扩展

我计划重写一个小的C++ OpenGL字体库我使用FreeType 2做了一段时间,因为我最近发现了对更新的OpenGL版本的更改.我的代码使用立即模式和一些函数调用我很确定现在已经弃用了,例如glLineStipple.

我非常希望支持一系列OpenGL版本,以便代码在可能的情况下使用例如VBO,或者在没有其他可用的情况下退回到立即模式等等.我不知道怎么回事.Afaik,您无法进行编译时检查,因为您需要在运行时创建有效的OpenGL上下文.到目前为止,我已经提出了以下建议(灵感来自其他线程/网站):

  • 使用GLEW在绘图函数中进行运行时检查并检查功能支持(例如glLineStipple)

  • 使用一些可以在编译时指定的#define和其他预处理程序指令来编译可以使用不同OpenGL版本的不同版本

  • 编译支持不同OpenGL版本的不同版本,并将每个版本作为单独的下载提供

  • 使用脚本(Python/Perl)发送库,该脚本检查系统上的OpenGL版本(如果可能/可靠)并对源进行适当的修改,使其适合用户的OpenGL版本

  • 仅针对较新的OpenGL版本,并放弃对以下任何内容的支持

无论如何我可能会使用GLEW来轻松加载扩展.

后续行动: 根据您非常有用的答案,我试图根据我的旧代码添加几行,这里是一个片段(没有测试/完成).我在config头中声明了相应的函数指针,然后在初始化库时,我尝试获得正确的函数指针.如果VBO失败(指针为null),我会回到显示列表(不推荐使用3.0),最后回到顶点数组.如果是fx,我应该(也许?)检查可用的ARB扩展名.VBO无法加载或太多工作?这会是一个坚实的批评吗?评论赞赏:)

#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
    #define OFL_WINDOWS
    // other stuff...
    #ifndef OFL_USES_GLEW
        // Check which extensions are supported
    #else
        // Declare vertex buffer object extension function pointers
        PFNGLGENBUFFERSPROC          glGenBuffers          = NULL;
        PFNGLBINDBUFFERPROC          glBindBuffer          = NULL;
        PFNGLBUFFERDATAPROC          glBufferData          = NULL;
        PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;
        PFNGLDELETEBUFFERSPROC       glDeleteBuffers       = NULL;
        PFNGLMULTIDRAWELEMENTSPROC   glMultiDrawElements   = NULL;
        PFNGLBUFFERSUBDATAPROC       glBufferSubData       = NULL;
        PFNGLMAPBUFFERPROC           glMapBuffer           = NULL;
        PFNGLUNMAPBUFFERPROC         glUnmapBuffer         = NULL;
    #endif
#elif some_other_system
Run Code Online (Sandbox Code Playgroud)

初始化功能: …

c++ opengl

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

java语法,如Object(){}

Class clazz = new Object(){}.getClass();
Run Code Online (Sandbox Code Playgroud)

为什么这可能,这意味着什么?有人可以提醒我吗?

例如:

public class Testing {
    public static void main(String[] args) {
        Class clazz = new Object(){}.getClass();
        System.out.println(clazz);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是: class Testing$1

java reflection class

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

将Vector*转换为char*

我将指针转换为向量时遇到问题char *.这是我的代码,我做错了什么?

char * Word1 = (*fileRead)[i].c_str();
char * Word2 =  dict[j].c_str();

if(WordCmp(Word1,Word2)
{
    found = true;   
}
Run Code Online (Sandbox Code Playgroud)

这是函数头WordCmp().

int WordCmp(char* Word1, char* Word2);
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

server.cpp:200: error: invalid conversion from 'const char*' to 'char*'
server.cpp:201: error: invalid conversion from 'const char*' to 'char*'
Run Code Online (Sandbox Code Playgroud)

c++ pointers vector char

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

用于循环显示列表的 Lambda 表达式转换

我正在尝试学习 lambda 表达式的使用,因此在阅读文档和其他各种相关文章后仍然难以实现。因此,如果我想将下面的循环转换为 lambda 表达式,那么我该怎么做,我只需要一种方法来查看 lambda 表达式如何工作。
代码:

var pc = Enumerable.Range(2, 100).ToList();
var j = 0;
while (j < pc.Count)
{
    Console.WriteLine(pc[j]);
    j++;
}
Run Code Online (Sandbox Code Playgroud)

c# lambda functional-programming list

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