小编Bud*_*ric的帖子

Java泛型

我想实现一个方法,它接受一个Objectas参数,将它转换为任意类型,如果失败则返回null.这是我到目前为止所拥有的:

public static void main(String[] args) {
    MyClass a, b;
    a = Main.<MyClass>staticCast(new String("B"));
}

public static class MyClass {
}

public static <T> T staticCast(Object arg) {
    try {
        if (arg == null) return null;
        T result = (T) arg;
        return result;
    } catch (Throwable e) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,类强制转换异常永远不会被抛出/捕获到staticCast()函数体中.似乎Java编译器生成了一个函数,String staticCast(Object arg)在该函数中你有一条线,String result = (String) arg;即使我明确地说模板类型应该是MyClass.有帮助吗?谢谢.

java generics casting

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

增强,共享内存和向量

我需要在进程之间共享一堆字符串(将来可能会有更复杂的对象).我决定使用boost :: interprocess但我无法使用它.我确定这是因为我不理解某些事情.我按照他们的例子,但如果有经验使用该库的人可以查看我的代码并告诉我什么是错的,我将非常感激.问题是它似乎有效,但经过几次迭代后,我在阅读器进程和有时在编写器进程上都会遇到各种异常.这是我的实现的简化版本:

using namespace boost::interprocess;
class SharedMemoryWrapper
{
public:
    SharedMemoryWrapper(const std::string & name, bool server) :
      m_name(name),
      m_server(server)
    {
        if (server)
        {
            named_mutex::remove("named_mutex");
            shared_memory_object::remove(m_name.c_str());
            m_segment = new managed_shared_memory (create_only,name.c_str(),65536);         
            m_stackAllocator = new StringStackAllocator(m_segment->get_segment_manager());
            m_stack = m_segment->construct<StringStack>("MyStack")(*m_stackAllocator);
        }
        else
        {
            m_segment = new managed_shared_memory(open_only ,name.c_str());
            m_stack = m_segment->find<StringStack>("MyStack").first;
        }
        m_mutex = new named_mutex(open_or_create, "named_mutex");
    }

    ~SharedMemoryWrapper()
    {
        if (m_server)
        {
            named_mutex::remove("named_mutex");
            m_segment->destroy<StringStack>("MyStack");
            delete m_stackAllocator;
            shared_memory_object::remove(m_name.c_str());
        }
        delete m_mutex;
        delete m_segment;
    }

    void push(const std::string & in)
    {
        scoped_lock<named_mutex> lock(*m_mutex);
        boost::interprocess::string …
Run Code Online (Sandbox Code Playgroud)

c++ boost ipc interprocess

6
推荐指数
1
解决办法
7507
查看次数

C++流到内存

我怎么能创建std :: ostream和std :: istream对象来指向我分配和管理的一块内存(我不希望流释放我的内存).

我正在寻找使用rdbuf() - > pubsetbuf()来修改其他流之一 - 比如sstringstream.但是我认为stringstream使用的streambuf会在之后释放缓冲区吗?

基本上我正在尝试将一些东西序列化为共享内存.

谢谢.

c++ stream

6
推荐指数
1
解决办法
4091
查看次数

CUDA是否将内存固定为零拷贝?

固定内存应该会增加主机到设备的传输速率(api参考).但是我发现我不需要调用cuMemcpyHtoD来让内核访问这些值,或者cuMemcpyDtoA让主机读回值.我不认为这会起作用,但确实如此:

__global__ void testPinnedMemory(double * mem)
{
    double currentValue = mem[threadIdx.x];
    printf("Thread id: %d, memory content: %f\n", threadIdx.x, currentValue);
    mem[threadIdx.x] = currentValue+10;
}

void test() 
{
    const size_t THREADS = 8;
    double * pinnedHostPtr;
    cudaHostAlloc((void **)&pinnedHostPtr, THREADS, cudaHostAllocDefault);

    //set memory values
    for (size_t i = 0; i < THREADS; ++i)
        pinnedHostPtr[i] = i;

    //call kernel
    dim3 threadsPerBlock(THREADS);
    dim3 numBlocks(1);
    testPinnedMemory<<< numBlocks, threadsPerBlock>>>(pinnedHostPtr);

    //read output
    printf("Data after kernel execution: ");
    for (int i = 0; i < THREADS; ++i) …
Run Code Online (Sandbox Code Playgroud)

cuda

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

安装了MSVC++ 2005的另一台计算机上的SideBySide错误

我在另一台计算机上构建和运行项目时遇到了一些奇怪的问题.这是一个并排的错误.通常原因是机器上没有安装c ++可再发行组件等.但是在这种情况下,项目是在该机器上编译的.安装了MSVC++ 2005,运行时应该在那里(无论如何我再次安装了运行时).为什么链接器引用了机器上不可用的运行时库?

我正在动态链接到运行时库.

有关如何调试此问题的任何想法?

谢谢.

编辑

我不想开始另一篇文章,因为它是相关的.由于这个DLL版本一团糟,这是静态链接到运行时的一个很好的理由吗?我会避免所有这些问题吗?我认为动态链接到运行时没有任何优势.我的印象是,使用DLL运行时,您可以获得使用新DLL进行更新/错误修复的好处.但是由于SxS和清单,它确保它加载DLL的特定版本(旧版本)?那么动态运行时到底有什么意义呢?可能节省了几kb的空间,因为您没有在所有依赖库中嵌入重用函数.但是比较一下你的应用程序的成本将无法运行,因为从机器中删除了一些古老的运行时版本,是否值得呢?

再次感谢.仍在追踪原始问题,可能不得不重新编译我正在使用的每个库.

c++ side-by-side

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

标签 统计

c++ ×3

boost ×1

casting ×1

cuda ×1

generics ×1

interprocess ×1

ipc ×1

java ×1

side-by-side ×1

stream ×1